最近调试程序遇到一个问题:我作为客户端,设备作为服务端,向设备发送流媒体数据包,之前一直正常,但一段时间后设备接收显示不正常,此时检测发送端程序显示send返回值正常,但是wireshark抓包未看到数据。
查找过程:
本着先怀疑自己程序的问题的原则,在发送端做了很多测试,包括组包,sleep,但无法解决问题。后来再增加一个TCP测试工具作为接收端,发送端同时向设备和测试工具发送数据,当设备接收异常的时候,观察测试工具,测试工具一直接收是正常的,但此时还是无法证实是设备的问题。
重新抓包,一直抓和设备通信的数据包,一开始发送数据正常,一段时间后当设备异常时,此时发现设备返回TCP ZeroWindow,证实了是设备缓冲区满了,故无法继续发送数据,而本地发送缓冲区很大,所以send一直显示正常,实际无法再向设备发送数据。待设备端优化再调试。
【TCP window Full】表示发送方暂时没办法再发送数据;
【TCP zerowindow】表示发送方暂时没办法再接收数据。
,