UDP的阻塞式监听不触发问题

排查故障
通讯失败,观察通讯日志发现发送但未接收.查看Wireshark监控,发送与响应均有记录,因此发送模块没有问题.问题在于监听部分.

360阻塞监听

在一台新电脑上安装了程序,但发现开启程序后Listener(UdpClient)在执行Receive(ref IPEndPoint)时被强制停止.

并出现listener被释放时出现的错误:"一个封锁操作被对 WSACancelBlockingCall 的调用中断".
考虑到之前360存在影响程序通讯的情况,把360关闭后执行,同样存在问题.卸载360后监听成功启动并阻塞等待.

Win防火墙阻挡接收
在解决了360阻塞监听后,仍然未收到数据,开启WireShark监控并在监听启动处设置断点.发现通讯WireShark中首发正常,但监听阻塞未触发.
试通过两种本地通讯软件与硬件通讯,一个成功一个失败,成功的程序可能是C++程序,而失败程序同样是C#+.net.
之后使用失败的工具与软件进行通讯,测试成功.
.net的Udp方式在PC内外通讯时被阻塞,而在PC内通讯成功.此时想到Win防火墙.关闭后成功触发.

相关经验
在解决问题过程中咨询了群里的朋友,找到一些很好的排查方法及之前收集的方法:
- cmd中输入netstat - ano可以查看本地所有使用中的IP及端口状态.
- UDP协议中.如果收到未开放监听的端口.则在wireshark中看到收到的包不再是UDP类型,而是ICMP类型.

--- Lan (sunlyk@QQ.com)
posted @ 2017-08-25 12:48  sunlyk  阅读(1212)  评论(0编辑  收藏  举报