-1

Java で XML ファイルを転送しようとしていますが、ファイルを受信するクライアントが無限ループでフリーズし、解決方法がわかりません。


ファイルを送信するために使用しているコードは次のとおりです。

FileInputStream fileInputStream = new FileInputStream(new File("file.xml"));
byte[] buffer = new byte[socket.getSendBufferSize()];
int bytesRead = 0;
while((bytesRead = fileInputStream.read(buffer)) > 0)
{
    out.write(buffer, 0, bytesRead);
}
out.flush();
fileInputStream.close();

ファイルを受信するために使用しているコードは次のとおりです。

byte[] mybytearray = new byte[1024];
File file = new File("file.xml");
FileOutputStream fileOutputStream= new FileOutputStream(file);
int bytesRead = 0;
while((bytesRead = in.read(mybytearray, 0, mybytearray.length)) > 0);
{
    fileOutputStream.write(mybytearray, 0, bytesRead);
}
fileOutputStream.close();

私たちを手伝ってくれますか?

ありがとうございました!

4

1 に答える 1

1

レシーバーはデータがいつ終了するかを知らないため、レシーバーはタイムアウトになるまでソケットからのデータの読み取りをブロックされます。2 つのソリューション:

  1. 最初にサイズを送信し、十分なデータ(サイズと同じ)を読み取ってから、ジャンプアウト読み取りのソケットを閉じます。

  2. xmlファイルの送信が終了したら、EOFを送信してファイルが終了したことを示し、EOFを読み取ると飛び出します。

于 2012-10-02T02:47:48.087 に答える