[英]udp socket stops receiving data
我正在学习使用python进行网络编程,并且正在尝试编写从android sdk https://github.com/android/platform_development/tree/master/samples/ToyVpn派生的Toy vpn。
我的玩具vpn是https://github.com/325862401/ToyVPN 。
仅适用于Linux。 我的家庭网络位于NAT之后。
连接到远程服务器后,我可以使用此vpn上网。 但是大约半小时或一段时间后,客户端udp
套接字停止接收任何数据,但服务器可以正常接收和发送。 此时,我必须终止我的客户端, ToyVpnClient
再次运行ToyVpnClient
。 它会正常工作一段时间,直到再次停止接收为止。
请帮助我检查客户端日志。
>2013-08-24 11:42:38 INFO receive data from the tunnel timeout`
您会看到发生问题时,套接字总是发送而不是接收。
>
表示send
, <
表示receive
我想知道为什么udp
套接字停止接收数据。
是否有任何调试方法来查找原因?
目前,我只是使用logging
来调试程序。
由于您正在尝试在Internet上使用客户端,因此,所有Internet网络都代表了可能的原因的全部范围。
这里没有简单的调试方法。 当然,可能的原因可能是软件错误,也可能是您和远程服务器之间的某些中间网络配置。
您应该使用良好的wireshark
或服务器与服务器之间的命令行tcpdump
捕获udp
通信,并检查是否要停止发送数据包或服务器是否正在停止接收数据包。 如果您发送数据包,但服务器未收到它们(服务器上的tcpdump
),则网络上有某些内容决定过滤您的数据包。 而且,如果它不在服务器上(例如防火墙规则来对数据包进行限制速率),那么在不修改程序逻辑的情况下您将无能为力。 就像每隔X秒钟更改UDP
端口或使用持久性tcp
连接。
udp套接字不稳定,一旦扫描或其他事件占用您的网络接口一段时间(尤其是在Android上为true),它可能会变为null。 使用tcp可以避免此问题。 如果要保持稳定的udp,请继续监视udp套接字的状态。 如果它变为null或发生任何异常情况,请删除此套接字并创建一个新的套接字。 将此重新激活人员放在一个循环中,以便您的udp套接字始终处于活动状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.