インターネットメッセンジャーの未来について議論し、
「なぜあなたのお気に入りのメッセンジャーが死ぬべきか」という記事を読んだ背景を背景に、サードパーティのサーバーに関係なく通信用のP2Pアプリケーションを作成した経験を共有することにしました。 より正確には、クライアントからサーバーに1つのメッセージを転送するだけの空白であり、機能のさらなる拡張はあなたの想像力にのみ依存します。
この出版物では、世界中のどこからでもP2P通信用の3つの簡単なアプリケーション、クライアント、サーバー、シグナルサーバーを作成します。
必要なもの:
-白い静的IPアドレスを持つ1つのサーバー。
-接続タイプがFull Cone NATのNAT用の2台のコンピューター(または2台の仮想マシンを持つ1台のコンピューター)。
-STUNサーバー。
フルコーンNATは、「内部アドレス:内部ポート」と「パブリックアドレス:パブリックポート」のペア間に明確な変換があるネットワークアドレス変換の一種です。
WikiでSTUNサーバーについて読むことができるものは次のとおりです。
「UDPパケットを使用してIPネットワーク経由で音声、画像、またはテキストを送信するプロトコルがあります。 残念ながら、通信する両方のパーティがNATの背後にある場合、通常の方法では接続を確立できません。 これは、STUNが役立つ場所です。 これにより、アドレス変換サーバー(またはこれらのサーバーのいくつか)の背後にあるクライアントは、外部IPアドレス、特定の内部ポート番号に関連付けられた外部ネットワークでのアドレスとポートの変換方法を決定できます。
問題を解決するときに、次のPythonモジュールが使用されました:socket、twisted、stun、sqlite3、os、sys。
サーバーとクライアント間、およびサーバー、クライアント、シグナルサーバー間のデータ交換には、UDPプロトコルが使用されます。
一般的に、機能メカニズムは次のようになります。
サーバー<-> STUNサーバー
クライアント<-> STUNサーバー
サーバー<->シグナルサーバー
クライアント<->シグナルサーバー
クライアント->サーバー
1.接続タイプがFull Cone NATのNATの背後にあるクライアントは、STUNサーバーにメッセージを送信し、外部IPの形式で応答を受信し、PORTを開きます。
2.接続タイプがFull Cone NATのNATの背後にあるサーバーは、STUNサーバーにメッセージを送信し、外部IPの形式で応答を受信し、PORTを開きます。
同時に、クライアントとサーバーは、Signal Serverの外部(白い)IPとPORTを認識しています。
3.サーバーは外部IPとPORTでデータをSignal Serverに送信し、Signal Serverはそれらを保存します。
4.クライアントは、外部IPおよびPORTのデータと、外部IP PORTが予期する目的のサーバーのid_destinationのデータをSignal Serverに送信します。
Signal Serverはそれらを保存し、id_destinationを使用してデータベースを検索し、応答として、文字列として見つかった情報を返します: 'id_host、name_host、ip_host、port_host';
5.クライアントは、見つかった情報を受け入れ、区切り文字で区切り、(ip_host、port_host)を使用して、サーバーにメッセージを送信します。
アプリケーションは、Debian 7.7でテストされたPythonバージョン2.7で書かれています。
内容を含むserver.pyファイルを作成します。
セクションの適切なフィールドに入力します:「外部IPとシグナルサーバーのポート」および「このクライアントのIPとポート」。
内容を含むclient.pyファイルを作成します。
セクションの適切なフィールドに入力します:「外部IPとシグナルサーバーのポート」および「このクライアントのIPとポート」。
内容を含むsignal_server.pyファイルを作成します。
できた!
アプリケーションの起動順序は次のとおりです。
-signal_server.py
-server.py
-client.py