Java ソケットを使用して大容量ファイルを転送する方法

Javaソケットで大容量ファイルを転送するには、以下の手順に従います:

  1. 特定のポート番号において、クライアントの接続を待ち受けるServerSocketオブジェクトを作成します。
  2. クライアントは、Socketオブジェクトを使用してサーバーのIPアドレスとポート番号に接続します。
  3. サーバー側はクライアントからの接続要求を受け、accept()メソッドでソケットオブジェクトを返し、クライアントとの通信を行います。
  4. クライアントはInputStreamとOutputStreamをSocketオブジェクトから取得して、データの読み取りと送信を行います。
  5. 服务器端也通过Socket对象获取InputStream和OutputStream,用于读取和发送数据。
  6. サーバー側で、InputStreamからファイルの内容を読み込み、その内容をOutputStreamに出力してクライアントに送信する。
  7. クライアントはInputStreamからサーバーから送信されたファイルの内容を読み取り、内容をファイルに書き込む。
  8. 6と7のステップを、ファイルの転送が完了するまで、繰り返します。
  9. すべてのストリームとソケット接続を閉じます。

それでは簡単なサンプルコードを見てみましょう

サーバーサイドコード:

import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = new FileOutputStream("output.txt");
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
System.out.println("文件传输完成");
outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}

クライアントコード:

import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8888);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = new FileInputStream("input.txt");
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
System.out.println("文件传输完成");
inputStream.close();
outputStream.close();
socket.close();
}
}

この例では、サーバー側でクライアントから送信されたファイルの内容が”output.txt”というファイルに書き込まれます。クライアント側は”input.txt”というファイルからファイルの内容を読み込んで、サーバー側に送信します。

ファイル転送時に注意:このサンプルコードは小規模ファイルの転送のみに使用できます。大規模ファイルの転送には、マルチスレッドや断点続行などの技術を使用して最適化することを検討してください。

bannerAds