0

UDPチャットサーバーとクライアントを実装するための簡単な設計やアイデア、または一般的な手順を教えてもらえますか?コードを求めているのではなく、自分で試してみたいです。プログラミング言語に依存しない説明を探しています。

前もって感謝します

4

3 に答える 3

2

この本の第9章をご覧ください。クライアントに関するすべてのクエリをクリアします-チャットアプリケーションのサーバーアーキテクチャ。

于 2012-05-18T03:38:07.067 に答える
2

従来の設計では、ユーザーがチャットクライアントにテキスト行を入力するたびに、そのクライアントはテキスト(および場合によってはユーザー名などの他の情報)をUDPパケットに入れてサーバーに送信します。サーバーはUDPパケットを受信し、パケットのコピーを、認識している他のすべてのクライアントに転送します。他のクライアントが転送されたパケットを受信すると、それぞれがローカルユーザーが読み取れるようにパケットの内容を表示します。

唯一の非自明な部分は検出です。つまり、クライアントはUDPパケットの送信先のIPアドレスをどのように認識し、サーバーは受信したパケットの転送先のIPアドレスをどのように認識しますか。

すべてのクライアントが常にサーバーと同じイーサネットLAN上にあることを保証できる場合、これは簡単に処理できます。常にすべてのUDPパケットをブロードキャストアドレス(255.255.255.255)に送信するだけで、LAN上のすべての人がそれらを受け取ります。(実際、このシナリオでは、クライアントが相互に直接通信できるため、サーバーはまったく必要ありません)。

クライアントがインターネット上の任意の場所にあるというより現実的なケースでは、発見は少し難しくなります。うまくいけば、よく知られた固定された場所(www.thabo-chat.comなど)でサーバーを実行し、そのホスト名をクライアントにハードコーディングすることができます。次に、クライアントが起動するたびに、UDPパケットをサーバーに送信して、サーバーにその存在を通知します。サーバーは、受信したUDPパケットから送信元IPアドレスを読み取り、既知のクライアントのリストに追加できます。受信したパケットを転送するIPアドレス。また、各クライアントから最後に連絡があったときのタイムスタンプを保持し、IPアドレスが長期間連絡されていない場合は、リストからIPアドレスを削除する必要があります(その後離れたクライアントに無意味にパケットを送信しないようにするため)。

インターネット経由でUDPを使用するときに直面する最後の問題は、インターネットからのUDPパケットをブロックするファイアウォールの背後に多くのコンピューターがあるため、サーバーが送信するUDPパケットがクライアントに到達しない場合が多いことです。それらをに送信しようとしていました。これにはあまり良い解決策はありません。クライアントユーザーにルーターでUDPポート転送を設定するように依頼することはできますが、それは面倒であり、多くの人はそれを行うスキルを持っていません。その場合の唯一の実際の代替手段は、代わりにTCPを使用し、クライアントにTCP経由でサーバーに接続させ、代わりにその方法でデータを送受信させることです(ほとんどすべてのファイアウォールが発信TCP接続を介した双方向データトラフィックを許可するため、この方法が機能します、それはWebブラウジングと電子メールに必要なので)

于 2012-05-18T04:59:46.060 に答える
0

Pythonは、最初から簡単に使える言語です: http ://wiki.python.org/moin/UdpCommunication

于 2012-05-18T03:27:21.527 に答える