我需要执行3way stop并等待用c ++(带winsock 2)编写的客户端和服务器应用程序之间的握手进行分配。客户端发送SYN。服务器递增客户端序列号并发送SYN-ACK。客户端递增服务器序列号并发送ACK。
为了模拟数据包丢失,客户端和服务器连接到中间路由器程序,该程序偶尔不会转发数据包,从而导致丢失。我应该如何构造我的sendto(),select(),recvfrom()语句来解决可能的丢包问题?
例如,如果SYN丢失且客户端超时,请重新发送。如果SYN-ACK丢失,客户端超时并重新发送SYN。如果ACK丢失了,我不知道该怎么办。
编辑:在我的客户端基本上是这样的:
我如何知道何时停止循环?
答案 0 :(得分:1)
select
可用于检查何时可以无阻塞地读取套接字。
至于检查ACK所属的已发送数据包,请检查序列号。
如果在超时内没有收到ACK,则只需重新发送最后一个数据包即可。您发送的数据包类型无关紧要,如果您没有收到确认,则应重新发送。