我建立套接字服务器时遇到问题,客户端可以发送文件给我,我可以收到。但是当我尝试向客户端发送ACK消息时,他们无法接收到。
dis = new DataInputStream(client.getInputStream());
File file = new File("D:/socket/files/");
if (!file.exists()) {
file.mkdir();
}
fos = new FileOutputStream(new File(filePath));
inputByte = new byte[1024];
System.out.println("Start to receive file");
while ((length = dis.read(inputByte, 0, inputByte.length)) > -1) {
String s = new String(inputByte,0,length);
fos.write(inputByte, 0, length);
fos.flush();
}
System.out.println("File Received Location: " + filePath);
OutputStream out = client.getOutputStream();
PrintWriter pw=new PrintWriter(out);
pw.write("hello");
pw.flush();
pw.close();
这是我的服务器接收和发送消息代码。我使用wireshark发现客户端向我发送数据后,我会自动发送[ACK]消息而没有任何内容,然后客户端发送[FIN,ACK]给我,我可以发送两个消息,一个是[ACK]并且另一个是[PSH,ACK]。 “hello”消息在[PSH,ACK]数据包内。我认为原因是当客户端向我发送[FIN,ACK]时,他们已经关闭了连接。无论如何我可以在我发送回客户端的第一个[ACK]数据包中添加消息吗?wireshark-capture
答案 0 :(得分:1)
没有。但你为什么要那样做?您的客户端正在发送数据,一旦确认(ACK),它就会关闭连接。它甚至不会读取服务器发送的数据。真正的问题是,客户是否期望数据?似乎没有。