发送文件后通过套接字发送文本

Sending a text over socket after sending a file

我有一个客户端,它会将文件发送到服务器...服务器以块的形式获取文件并处理数据并将其发送回服务器。稍后,在文件被完全传输后,我希望服务器告诉客户端数据处理是否有任何错误。

客户端:使用此代码发送和接收文件数据

    toServer = socket.getOutputStream();
    fromServer = socket.getInputStream();
    fileReader = new BufferedInputStream(fis);
    fileWriter = new BufferedOutputStream(fos);

    while ((count = fileReader.read(bytes)) > 0) {
        toServer.write(bytes, 0, count);
        total_received = 0;
        while(total_received < count) {
            incount = fromServer.read(inbytes);
            total_received += incount;
            fileWriter.write(inbytes, 0, incount);
        }
    }
    toServer.close(); //to break the while loop on server
    incount = fromServer.read(inbytes);
    System.out.println(incount);

服务器:

    while ((count = fromClient.read(bytes)) > 0) 
    {
       //processedBytes
        toClient.write(processedBytes, 0, count);
    }
    toClient.write("Process done!".getBytes(), 0, "Process done!".length());
    toClient.flush();

问题:

文件传输成功.....但客户端未收到处理文件后的消息....我得到java.net.SocketException:套接字已关闭 在客户端。我知道套接字在服务器端关闭,而客户端仍在侦听以引发 SocketException。但是服务器中的 toClient.write() 语句会发生什么?

提前致谢。

您不应该调用 toServer.close(),因为它也会关闭套接字。如果你想打破服务器上的 while 循环,你需要发送一些特殊字符,比如 SOH 字符,可以在服务器端搜索这些字符,一旦服务器得到它,它就会终止循环并将 ack 发送回客户端,然后客户端可以关闭插座。