2011-08-16 4 views
1

私はいくつかのpythonスクリプトを作成し、私のコンピュータといくつかの遠隔シェル(シェルアクセスを提供するいくつかのウェブサイト)の両方で実行しました。UDPソケットとPythonで奇妙なネットワーク動作

私はスレッド、パイプ、UDPソケットを使用してP2P方式でデータを転送しているため、各スクリプトは同じソケットで送受信できます。これが動作するかどうかをテストするために、私は自分のコンピュータに1つのターミナルを開き、もう1つのターミナルをシェルに接続したsshで開きます。私はスクリプトが両方のマシンで同じであることを確認し、それにIPアドレスを与えます。ここで

はスクリプトです:http://codepad.org/V9Q1KcDT

(私はここまたは直接ではなく、それを貼り付ける必要がある場合、私は知らない)

私の問題はこれです:私が送った文字列は、何かに20%の土地のようです時間、時にはしばしば時々そうではなく、ランダムであるようです...

私は間違っていますか? UDPは信頼性がありませんか? pythonスレッド+パイプ+ソケットが遅すぎますか? シェルプロバイダに何らかのネットワーク問題がありますか? 私のプログラムに欠陥がありますか? パイプはスレッドと通信する良いソリューションですか?

私はシェルを使用しても問題はなく、試していませんが、テスト目的には便利です。

私はルータのように見えますが、私が唯一のコンピュータではない場合、ルータはパケットをどこに送信するのかをどのように知っていますか? (私が唯一のときに試みました、それは同じように行動しました)。

答えて

0

ユーザーデータグラムプロトコル(UDP)は、信頼性の低いデータグラムプロトコルを簡単に表すことができます。 UDPは配信に関する保証を提供しませんので、信頼性が必要な場合は、メッセージを再送信して自分で実装する必要があります。

つまり、スレッディングとマルチプロセッシングとリモートマシンとネットワークは、一度に診断するための多くの変数です。私はあなたに戻って、何か簡単に問題を沸かせようとお勧めします。例えば

  • 最初のtry TCPではなくUDP
  • の代わりに、スレッド、2つのプロセス(nit_sendをやって1、1やっnit_recv)を実行
  • ローカルマシン(使用上でそれらの両方を実行しますlocalhost:127.0.0.1

この基本テストが完了したら、機能を追加します。たとえば、UDPに切り替えます。ローカルでソートされたUDPの問題を解決したら、リモートマシンやスレッドなどを導入してみてください。

ルータの質問に関しては、ルータに接続されているすべてのマシンがNATである可能性が高いため、すべて同じIPアドレス(ルータのIPアドレス)をインターネット上のマシンに送信します。ローカルサブネット上の特定のマシンにトラフィックをルーティングする場合は、NATとポートフォワーディングを調べます。