1

我正在学习 python 中的网络编程,我正在尝试编写一个从 android sdk https://github.com/android/platform_development/tree/master/samples/ToyVpn分叉的玩具 vpn 。

我的玩具 vpn 是https://github.com/325862401/ToyVPN

它仅适用于 Linux。我的家庭网络位于 NAT 后面。

连接到远程服务器后,我可以使用此 vpn 上网。但是大约半小时或一段时间后,客户端udp套接字停止接收任何数据,但服务器可以正常接收和发送。此时我必须终止我的客户端并ToyVpnClient再次运行。它可以正常工作一段时间,直到它再次停止接收。

请帮我检查客户端日志。

>2013-08-24 11:42:38 INFO     receive data from the tunnel timeout`

你可以看到当问题发生时,套接字总是发送,而不是接收。

>手段send,<手段receive

我想知道为什么udp套接字停止接收数据。

有什么调试方法可以找到原因吗?

现在我只是用来logging调试我的程序。

4

2 回答 2

0

由于您在 Internet 上尝试您的客户端,因此所有 Internet 新网络都代表了整个可能的原因。

这里没有简单的调试方法。可能的原因当然可能是软件错误,也可能是您和远程服务器之间的一些中间网络配置。

您应该使用您和服务器之间的良好或命令行来捕获udp流量,并检查您是否停止发送数据包或服务器是否停止接收它们。如果您发送数据包但您的服务器没有收到它们(在服务器上),那么网络上有一些东西决定过滤您的数据包。如果它不在服务器上(例如限制数据包速率的防火墙规则或类似的东西),那么如果不修改程序的逻辑,您将无能为力。就像每 X 秒更改一次端口或使用持久连接一样。wiresharktcpdumptcpdumpUDPtcp

于 2013-08-25T13:25:17.523 回答
0

udp 套接字不稳定,一旦扫描或其他事件占用您的网络接口一段时间(尤其是在 Android 上更是如此),它可能会变为空。使用 tcp 可以避免这个问题。如果您想保持稳定的 udp,请持续监控您的 udp 套接字的状态;如果它变为 null 或发生任何异常情况,请删除此套接字并创建一个新套接字。将这个重新激活的人员放入一个循环中,以便您的 udp 套接字始终处于活动状态。

于 2013-08-25T19:19:08.913 回答