尝试使用JAva套接字传输文件时无限循环

时间:2012-10-01 22:19:40

标签: java file sockets tcp transfer

我正在尝试用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();

你能帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

接收方不知道数据何时结束,因此接收器在从套接字读取数据时被阻止,直到超时。 两个解决方案:

  1. 首先发送大小并读取足够的数据(与大小相同),然后关闭跳出读取的套接字。

  2. 完成发送xml文件后,发送EOF表示文件已完成,读取EOF时跳出。