ソケットを介して2台のコンピューター間でファイルを転送する作業をしています。すべてが機能しているように見えますが、取得したファイルの内容を見ると、空です。私は何が間違っているのですか?
これが私のサーバー側のコードです。ファイルfoobar.txtが存在し、その内容は「helloworld!」です。
try{
ServerSocket ssock = new ServerSocket(12345);
Socket sock = ssock.accept();
//here I get the filename from the client, but that works fine.
File myFile = new File("foobar.txt");
byte[] mybytearray = new byte[(int) myFile.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile));
bis.read(mybytearray, 0, mybytearray.length);
OutputStream os = sock.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
sock.close();
} catch (Exception e){
e.printStackTrace();
}
そして、これが私のクライアントコードです:
try {
Socket socket = new Socket(host, port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.print("get foobar.txt\r\n");
out.flush();
byte[] streamIn = new byte[1024];
InputStream in = socket.getInputStream();
FileOutputStream file_src = new FileOutputStream("foobar.txt");
BufferedOutputStream file_writer = new BufferedOutputStream(file_src);
int i;
while ((i = in.read()) != -1) {
file_writer.write(i);
}
file_writer.flush();
file_writer.close();
file_src.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
解決しました
複数のスレッドと複数のソケットを使用し、1台のマシンですべての接続をテストしているため、クライアント(クライアントとサーバーの両方のコードが含まれている)が他のクライアントではなく自分自身に接続するという問題が発生しました。実行中のさまざまなクライアントのファイル転送ポートを変更すると、これがすべて機能します。これを見て、私にいくつかの提案をしてくれたすべての人に感謝します。