服务器无法识别文件的结尾 - java

时间:2015-09-26 23:33:43

标签: java sockets server client

所以我有一个Java客户端服务器应用程序。当我尝试将单个文件发送到服务器(使用SSLSockets)时,它工作正常(因为连接在发送文件的字节数组后直接关闭)。虽然,一旦我尝试发送第二个文件inputStream reader循环挂起(传输后可能会收到更多字节?IDK)。我将编写稍微修改过的代码块,以便在下面显示结构。

  

客户端

OutputStream = sslsocket.getOutputStream();

public void sendFile(Path pathOfFile){
    byte[] bytesToSend = Files.readAllBytes(pathOfFile);
    out.write(bytesToSend);
    out.flush();
}
  

服务器

public void receiver(File file){
    InputStream in = sslsocket.getInputStream();

    byte[] fileBytes = new byte[sslsocket.getReceiveBufferSize()];
    int temp = 0;
    while ((temp = in.read(fileBytes)) > 0) { // stalls after a couple of reads
        file.write(fileBytes , 0, temp);
    }
}

所以,如果我在sendFile方法之后直接关闭连接,一切正常。但是,如果我甚至在sendFile方法之后直接在调试和断点上运行客户端,则服务器只会冻结read()循环的while方法。发生了什么事?

1 个答案:

答案 0 :(得分:0)

  

无法识别文件的结尾

除非您关闭连接,否则无法识别文件的结尾。

您正在读取套接字直到流结束,这只有在对等方关闭连接时才会发生。如果您不关闭连接,接收器将阻止。