我最近开始从事 IT 领域的工作,他们的第一个任务是让我使用 Java 通过简单的套接字与远程电路板进行通信。今天我完成了所有工作,但我发现我的消息没有被正确接收...所以我开始深入研究,并开始使用 wireshark 来更好地了解“发生了什么?”。我知道在发送数据之前,客户端和服务器会进行三次握手,然后客户端发送其数据,完成后它会关闭连接并告诉服务器。现在,这就是我的问题:我使用 Packet Sender(非常适合调试和测试)向远程电路板发送一个数据包,这就是我看到的:
First 3 message are the handshake
1. client SYN server
2. server SYN, ACK client
3. client ACK server
then I got this messages
4. client PSH, ACK server
5. server ACK client
6. client FIN, ACK server
7. server ACK client
8. server FIN, ACK client
9. client ACK server
PSH 是我将字节发送到服务器套接字的阶段,然后服务器回复,因此我关闭(FIN)连接,然后服务器执行相同操作。为了进行正确的通信,必须遵守这些顺序?这是我使用 JAVA 程序发送的数据包的结果:
Handshake
1. client SYN server
2. server SYN, ACK client
3. client ACK server
then I got this messages
4. client PSH, ACK server
5. client FIN, ACK server
6. server ACK client
7. server ACK client
8. server FIN, ACK client
9. client ACK server
您觉得如何?我该如何解决这个问题?这真的很烦人,因为服务器什么都没做。我应该尝试让套接字打开几毫秒吗?TCP 协议是否总是像上面数据包发送器示例中描述的那样工作,或者可以像我的程序中那样与更多请求混合?谢谢大家
答案1
我解决了这个问题,在关闭 Streand 和 Socket 之前设置了 300ms 的延迟,这样客户端和服务器就有合适的时间互相通信。较低的延迟会使它们再次不同步!希望这篇文章能对某些人有所帮助 :D