2015-09-26 69 views
0

所以我有一个Java客户端服务器应用程序。当我试图发送单个文件到服务器(使用SSLSockets)时,它工作正常(因为连接在发送文件的字节数组后立即关闭)。虽然,只要我尝试发送第二个文件inputStream阅读器循环挂起(可能在传输之后接收更多字节?IDK)。我将编写稍微修改过的代码块,以便在下面看到结构。服务器无法识别文件的结尾 - java

客户

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方法之后,服务器就会冻结while循环的read()方法。到底是怎么回事??

+0

此代码不能编译。真正的代码是什么样的?注意在编辑之前,您的磁贴既更具体也更准确:将其卷回。 – EJP

+0

我没有从没有互联网访问的另一台机器复制它。代码块与我的实际相同。 – Rakim

+0

不,他们不是。没有'getReceivedBufferSize()'这样的方法。这是一个错字。 – EJP

回答

0

无法识别的文件

的到底有没有文件末尾承认,除非你关闭连接。

您正在读取套接字直到流结束,只有当对等关闭连接时才会发生。如果你没有关闭连接,接收机将会阻塞。

+0

因此对于需要传输的每个文件,我需要另一个连接?不可能。 – Rakim

+0

不,您需要不依赖流结束来划分每个文件的不同代码。 – EJP