Java套接字接收文件然后将响应发送回客户端

时间:2018-05-23 15:44:47

标签: java wireshark serversocket

我建立套接字服务器时遇到问题,客户端可以发送文件给我,我可以收到。但是当我尝试向客户端发送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

1 个答案:

答案 0 :(得分:1)

没有。但你为什么要那样做?您的客户端正在发送数据,一旦确认(ACK),它就会关闭连接。它甚至不会读取服务器发送的数据。真正的问题是,客户是否期望数据?似乎没有。