所以我有一个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
方法。发生了什么事?
答案 0 :(得分:0)
无法识别文件的结尾
除非您关闭连接,否则无法识别文件的结尾。
您正在读取套接字直到流结束,这只有在对等方关闭连接时才会发生。如果您不关闭连接,接收器将阻止。