gpt4 book ai didi

Java TCP 服务器在客户端断开连接之前不接收数据包

转载 作者:可可西里 更新时间:2023-11-01 02:51:08 24 4
gpt4 key购买 nike

我有一个用 Java 编写的 TCP 服务器和一个用 Python 编写的客户端。 python 客户端只发送 10 个数据包,每次发送之间等待 2 秒。但是,java 服务器似乎在 python 脚本终止之前无法识别数据包,在该脚本中它最终接收到所有消息,就好像它们是同时进入的一样。我已经用 wireshark 观看并验证了客户端是否正确发送了所有数据包。

ServerSocket serverSocket = new ServerSocket(6789); 

Socket clientSocket = null;
System.out.println ("Waiting for connection.....");

try {
clientSocket = serverSocket.accept();
}
catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}

System.out.println ("Connection successful");
System.out.println ("Waiting for input.....");

String data;

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));

while ((data = in.readLine()) != null) {
System.out.println ("Server: " + data);
}

Python代码: 进口套接字 导入时间

TCP_IP = '192.168.1.127'
TCP_PORT = 6789

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((TCP_IP, TCP_PORT))

for i in range(10):
sock.send("Packet #: %s" % str(i))
time.sleep(2)

我看到的输出:

Connection successful
Waiting for input.....
Server: Packet: #: 0Packet: #: 1Packet: #: 2Packet: #: 3Packet: #: 4Packet: #: 5Packet: #: 6Packet: #: 7Packet: #: 8Packet: #: 9

最佳答案

您正在服务器中使用 BufferedReader.readLine()...但从未从客户端发送新的行符号。

因此,服务器不知道它是否会在那条线上接收更多数据,因此必须等到确定那条线上不会再发送数据:关闭套接字是一种方式以表明这一点。

\n添加到您从客户端发送的数据包的末尾。

sock.send("Packet #: %s\n" % str(i))

关于Java TCP 服务器在客户端断开连接之前不接收数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com