![]() |
1
4
如果我理解的正确,你可以使用一些窗口,如果你还没有。 也就是说,不要接受窗口外的消息。例如,如果您的计数器为1000,您可以将接受的传入计数器ID的范围限制为1000…1031(包括1000…1031)。因此,超出这个范围的任何事情都是您无法处理的(强制您启动一些重新发送协议)。一旦你得到1000,你的上限将达到1032。一旦你的下限计数器是1001,你的上限就是1033,以此类推。你最后得到的是一个滑动窗。 如果这种情况是可以接受的,那么您需要检查的只是您的传入计数器ID在您接受的窗口内。这将是16位计数器的一个子集,因此您可以测试… incomingCounterID-lowerLimitCount<windowsize 只要处理无符号变量,就可以了。 希望这能有所帮助(而且是有道理的)。 |
![]() |
2
5
处理这个问题的通常方法是做模减法。序列号
例如,
|
![]() |
3
3
你的问题很久以前就在 RFC1982 如果您有未签名的序列号I1和I2,则适当的测试是 如果I1<gt;I2,则I1小于I2,并且
(或使用其反向大于测试) 对于32位无符号,2^(串行位-1)=2^31=x8000000 |
![]() |
4
0
我可以让客户保存两件事:
对于每个请求,客户机增加其内部计数器并将其保存在列表中。在请求消息中,它将消息计数器设置为模块65536。当响应消息出现时,客户机将遍历其等待的请求列表,以获取匹配的编号modulo 65536。如果此内部数字大于目前为止的最高值,则接受该消息。这将绕包问题推迟到40亿左右。下面是伪代码。
|
![]() |
5
0
这主要是一个组合的话,所以不要选择我作为答案,但既然你知道
你应该能够让一个相当好的系统运行。 请求方/响应方:
在请求者/响应者方面:
除非您以非常快的速度发送大量请求,否则这应该可以相当好地工作。这并不意味着网络上有任何人想做坏事。在这个设置上实现拒绝服务(DoS)是很简单的。 |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |