繁体   English   中英

udp套接字停止接收数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM