1

私はPythonでネットワークプログラミングを学んでおり、Android SDK https://github.com/android/platform_development/tree/master/samples/ToyVpnから分岐したToy vpnを書こうとしています。

私のおもちゃの VPN はhttps://github.com/325862401/ToyVPNです。

Linux専用です。私のホーム ネットワークは NAT の背後にあります。

リモートサーバーに接続した後、このvpnを使用してインターネットを閲覧できます. しかし、約 30 分またはしばらくすると、クライアントudpソケットはデータの受信を停止しますが、サーバーは正常に送受信できます。この時点で、クライアントを終了してToyVpnClient再度実行する必要があります。再び受信を停止するまで、しばらくの間正常に動作します。

クライアント ログの確認にご協力ください。

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

問題が発生すると、ソケットは受信ではなく常に送信することがわかります。

>手段send<手段receive

udpソケットがデータの受信を停止する理由を知りたいです。

原因を見つけるためのデバッグ方法はありますか?

今のところlogging、プログラムのデバッグに使用しました。

4

2 に答える 2

0

インターネット上でクライアントを試しているので、すべてのインターネット ネットワークによって表される考えられる原因の全宇宙があります。

ここでデバッグする簡単な方法はありません。考えられる原因は、もちろんソフトウェア エラーですが、ユーザーとリモート サーバーの間の中間ネットワーク構成も考えられます。

あなたとサーバーの間でgoodまたはコマンドラインudpを使用してトラフィックをキャプチャし、パケットの送信を停止しているか、サーバーがパケットの受信を停止しているかを確認する必要があります。パケットを送信してもサーバーが (サーバー上で) パケットを受信しない場合は、ネットワーク上にパケットをフィルタリングすることを決定する何かがあります。サーバー上にない場合 (たとえば、パケットをレート制限するためのファイアウォール ルールなど)、プログラムのロジックを変更せずにそれを行うことはできません。X秒ごとにポートを変更するか、永続的な接続を使用するように。wiresharktcpdumptcpdumpUDPtcp

于 2013-08-25T13:25:17.523 に答える
0

udp ソケットは安定しておらず、スキャンやその他のイベントがネットワーク インターフェイスをしばらく占有すると null になる可能性があります (特に Android ではそうです)。tcp を使用すると、この問題を回避できます。安定した udp を維持したい場合は、udp ソケットの状態を監視し続けてください。null になったり異常が発生した場合は、このソケットを削除して新しいソケットを作成してください。この再アクティブ化スタッフをループに入れて、udp ソケットが常に有効になるようにします。

于 2013-08-25T19:19:08.913 に答える