stevenjin 2023-03-30 11:05 采纳率: 98.2%
浏览 27
已结题

sockcet数据是按队列缓存在交换机吗

c# 用udp通信时,如果较长时间再Receive,会读到很早之前的旧数据吗?
也就是socket有没有把所有没读的数据,缓存在交换机。如果这个数据没有来读,下次来读,优先发这个旧的数据,是排队发的?

  • 写回答

3条回答 默认 最新

  • wanghui0380 2023-03-30 14:22
    关注

    前面已经说了,udp无连接,非可靠。丢包,乱序正常

    非广播组播的udp经过路由,路由会探测一下目标机器和端口在不在,在就发。不在就丢。(不在判定也不是很严格,就像前面那位说的,如果网络拥堵,探测包无回复,他就丢)
    同样乱序也正常,路由转发时候探测的回复到达顺序不可知,A包比B包先到,探测包后到,那么他实际转发比B晚

    至于广播组播的,那种是在网络上乱窜的,TTL生存期到达之前他们会在网络上乱窜,所以接收顺序就更是拼人品的事情

    然后把socket本身默认并不是断开就立刻断开的,端口其实还会默认保留一段时间,所以虽然你代码感觉断开了,但实际接收缓存实际还在继续接收

    就像前面那位老兄说的,我们其实不靠程序判定,我们通过抓包程序判定,抓包程序是直接桥接在网卡驱动上的。所以网络上收到啥就是啥,如果你的抓包程序就是几分钟后收到的,那么他就真的是几分钟后收到的

    ps:不过我奇怪的事情是,上个帖子已经说了。就你的项目而言1m就要来一次的东西,一个永不关闭的udpclient,一个永远异步接收就好。
    有怎么存在“较长时间再Receive”的事情,我不关闭udpclient,他永远保留本地端口(因为你还有一个1m一探测的主动查询,所以路由器还不会主动断开死路由信息),所以只要路由转发过来了,你就立刻收到,根本就不存在“较长时间再Receive”这种事情

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭