udp中的connect
工作一年多了还没写过技术性的博客,表达能力也有所欠缺,希望写点东西一方面锻炼自己,另一方面供碰到此类问题的朋友参考下。
问题现象:客户端更改目的IP地址(设备),不响应接收报文(应用层)
定位思路:
(1)抓包分析,发现设备中途换了一次IP地址,第一个报文客户端向默认目的IP为xx.xx.xx.x1发送报文,设备响应第一个报文携带设备IPxx.xx.xx.x2,第二个报文客户端向新设备IPxx.xx.xx.x2发送报文,设备也通过该IP回复客户端,但是报文已发送至客户端,只是应用层未响应更改IP后的报文。
(2)查看代码,发现客户端和设备采用udp通信,并且通过connect来指定目的地址,获取设备IP后只是将sin_addr = xx.xx.xx.x2。
(3)分析,问题肯定出在目的IP更改的地方但不知道为什么。
(4)查看资料,udp connect,udp中可多次使用connect,并且有两个作用:一是指定目的地址,而是断开之前的连接建立新连接。
(5)尝试修改,sin_addr = xx.xx.xx.x2后重新connect建立新连接,运行之后问题解决了。
结论:udp中connect指定目的地址,应用程序只响应指定目的地址发送的报文,目的地址更改后需要重新connect建立新连接。
疑问:但是在win xp和win 7电脑未出现该问题,问题出现在win8.1系统出现。
浙公网安备 33010602011771号