Java 套接字接收文件然后将响应发送回客户端
Java socket receiving file and then send response back to client
我在建立套接字服务器时遇到问题,客户端可以向我发送文件,我可以收到that.But当我尝试向客户端发送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发现client给我发数据后,我会自动发回[ACK] message 没有任何内容,然后client发[FIN,ACK]给我,我可以回发两条message,一个是[ACK]和另一个是 [PSH,ACK]。 "hello" 消息在 [PSH,ACK] 数据包中。我认为原因是当客户端向我发送 [FIN,ACK] 时,他们已经关闭了连接。无论如何,我可以在发送回客户端的第一个 [ACK] 数据包中添加消息吗?wireshark-capture
没有。但你为什么要那样做?您的客户端正在发送数据,一旦确认 (ACK),它就会关闭连接。它甚至不会读取服务器发送的数据。真正的问题是,客户是否需要数据?好像没有。
我在建立套接字服务器时遇到问题,客户端可以向我发送文件,我可以收到that.But当我尝试向客户端发送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发现client给我发数据后,我会自动发回[ACK] message 没有任何内容,然后client发[FIN,ACK]给我,我可以回发两条message,一个是[ACK]和另一个是 [PSH,ACK]。 "hello" 消息在 [PSH,ACK] 数据包中。我认为原因是当客户端向我发送 [FIN,ACK] 时,他们已经关闭了连接。无论如何,我可以在发送回客户端的第一个 [ACK] 数据包中添加消息吗?wireshark-capture
没有。但你为什么要那样做?您的客户端正在发送数据,一旦确认 (ACK),它就会关闭连接。它甚至不会读取服务器发送的数据。真正的问题是,客户是否需要数据?好像没有。