服务器无法识别文件结尾-java
所以我有一个Java客户机-服务器应用程序。当我尝试使用SSLSockets将单个文件发送到服务器时,它可以正常工作,因为在发送文件的字节数组后,连接会立即关闭。尽管如此,只要我尝试发送第二个文件,inputStream阅读器循环挂起可能会在传输后收到更多字节?IDK。我将编写稍加修改的代码块,以便结构在下面可见 客户 服务器 因此,如果我在sendFile方法之后直接关闭连接,一切正常。但是,如果我甚至在sendFile方法之后直接在debug和breakpoint上运行客户机,那么服务器就会在while循环的read方法上冻结。发生了什么事 无法识别文件的结尾 除非关闭连接,否则无法识别文件的结尾服务器无法识别文件结尾-java,java,sockets,server,client,Java,Sockets,Server,Client,所以我有一个Java客户机-服务器应用程序。当我尝试使用SSLSockets将单个文件发送到服务器时,它可以正常工作,因为在发送文件的字节数组后,连接会立即关闭。尽管如此,只要我尝试发送第二个文件,inputStream阅读器循环挂起可能会在传输后收到更多字节?IDK。我将编写稍加修改的代码块,以便结构在下面可见 客户 服务器 因此,如果我在sendFile方法之后直接关闭连接,一切正常。但是,如果我甚至在sendFile方法之后直接在debug和breakpoint上运行客户机,那么服务器就会
您一直在读取套接字,直到流结束,这只有在对等方关闭连接时才会发生。如果不关闭连接,接收器将阻塞 此代码不可编译。真正的代码是什么样子的?注意:在编辑之前,你的磁贴更具体,也更准确:将其回滚。我确实是从另一台无法上网的机器上复制的。代码块与我的实际代码块相同。不,它们不是。没有getReceivedBufferSize这样的方法。这是个打字错误,那是个打字错误。对不起,一个d太多对于每个需要传输的文件,我需要另一个连接?不可能。不,您需要不同的代码,这些代码不依赖于流的结尾来分隔每个文件。
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);
}
}