c# 用udp通信时,如果较长时间再Receive,会读到很早之前的旧数据吗?
也就是socket有没有把所有没读的数据,缓存在交换机。如果这个数据没有来读,下次来读,优先发这个旧的数据,是排队发的?
sockcet数据是按队列缓存在交换机吗
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- wanghui0380 2023-03-30 14:22关注
前面已经说了,udp无连接,非可靠。丢包,乱序正常
非广播组播的udp经过路由,路由会探测一下目标机器和端口在不在,在就发。不在就丢。(不在判定也不是很严格,就像前面那位说的,如果网络拥堵,探测包无回复,他就丢)
同样乱序也正常,路由转发时候探测的回复到达顺序不可知,A包比B包先到,探测包后到,那么他实际转发比B晚至于广播组播的,那种是在网络上乱窜的,TTL生存期到达之前他们会在网络上乱窜,所以接收顺序就更是拼人品的事情
然后把socket本身默认并不是断开就立刻断开的,端口其实还会默认保留一段时间,所以虽然你代码感觉断开了,但实际接收缓存实际还在继续接收
就像前面那位老兄说的,我们其实不靠程序判定,我们通过抓包程序判定,抓包程序是直接桥接在网卡驱动上的。所以网络上收到啥就是啥,如果你的抓包程序就是几分钟后收到的,那么他就真的是几分钟后收到的
ps:不过我奇怪的事情是,上个帖子已经说了。就你的项目而言1m就要来一次的东西,一个永不关闭的udpclient,一个永远异步接收就好。
有怎么存在“较长时间再Receive”的事情,我不关闭udpclient,他永远保留本地端口(因为你还有一个1m一探测的主动查询,所以路由器还不会主动断开死路由信息),所以只要路由转发过来了,你就立刻收到,根本就不存在“较长时间再Receive”这种事情本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 2024-五一综合模拟赛
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭