我有一个客户端会将一个文件发送到服务器......服务器以块的形式获取文件并处理数据并将其发送回服务器。之后,在完全传输文件之后,我希望服务器告诉客户端数据是否处理有或没有任何错误。
客户端:使用此代码发送和接收文件数据
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()语句会发生什么?
提前致谢。
答案 0 :(得分:0)
您也不应该在关闭套接字时调用toServer.close()
。如果你想打破服务器上的while循环,你需要发送一些特殊字符,如SOH字符,可以在服务器端搜索,一旦服务器获得它终止循环并将ack发送回客户端然后客户端可以关闭套接字。