Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器无法识别文件结尾-java_Java_Sockets_Server_Client - Fatal编程技术网

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

服务器无法识别文件结尾-java,java,sockets,server,client,Java,Sockets,Server,Client,所以我有一个Java客户机-服务器应用程序。当我尝试使用SSLSockets将单个文件发送到服务器时,它可以正常工作,因为在发送文件的字节数组后,连接会立即关闭。尽管如此,只要我尝试发送第二个文件,inputStream阅读器循环挂起可能会在传输后收到更多字节?IDK。我将编写稍加修改的代码块,以便结构在下面可见 客户 服务器 因此,如果我在sendFile方法之后直接关闭连接,一切正常。但是,如果我甚至在sendFile方法之后直接在debug和breakpoint上运行客户机,那么服务器就会

所以我有一个Java客户机-服务器应用程序。当我尝试使用SSLSockets将单个文件发送到服务器时,它可以正常工作,因为在发送文件的字节数组后,连接会立即关闭。尽管如此,只要我尝试发送第二个文件,inputStream阅读器循环挂起可能会在传输后收到更多字节?IDK。我将编写稍加修改的代码块,以便结构在下面可见

客户

服务器

因此,如果我在sendFile方法之后直接关闭连接,一切正常。但是,如果我甚至在sendFile方法之后直接在debug和breakpoint上运行客户机,那么服务器就会在while循环的read方法上冻结。发生了什么事

无法识别文件的结尾

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


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

此代码不可编译。真正的代码是什么样子的?注意:在编辑之前,你的磁贴更具体,也更准确:将其回滚。我确实是从另一台无法上网的机器上复制的。代码块与我的实际代码块相同。不,它们不是。没有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);
    }
}