发送文件后在套接字上发送文本

时间:2015-03-24 12:54:44

标签: java sockets client-server socketexception

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

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

    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:Socket closed on客户方。我知道套接字在服务器端关闭,而客户端仍然在监听时调出SocketException。但是服务器中的 toClient.write()语句会发生什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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