我们在Java服务器和C ++客户端之间创建了2个连接。 Java ServerSocket对象调用accept()两次,每次返回1个套接字; C ++客户端调用connect()两次。我们假设accept()返回的第一个Socket的端口应该与调用connect()的第一个客户端套接字的端口相同,第二个套接字的端口相同。
但是通过检查每个套接字上的端口号,我偶尔会看到异常情况,其中第一个套接字从accept()连接到第二个客户端套接字调用connect(),第二个套接字从accept()连接到第一个客户端套接字。
服务器和客户端都是单线程,用于建立连接。如何逆转序列?
答案 0 :(得分:1)
可以在网络上切换来自两个连接的初始同步分组的顺序。例如,如果“第一”连接的初始SYN数据包被丢弃,并且该数据包在“第二”连接的初始SYN数据包之后才重新发送。此外,即使您的服务器和客户端是单线程的,处理TCP堆栈的系统代码也可能是多线程的。
答案 1 :(得分:0)
您不知道客户端连接的顺序是什么?是。连接是与包重试的三次握手。积压队列中的序列将是最终ACK的接收顺序,您不知道哪些知识。