30

クライアントがソケット(たとえばhttp://socketplaceonnet.com )でリッスンする場合、新しいコンテンツがあることをどのようにして知ることができますか?クライアントはルーターの背後にあり、ポートフォワーディングがないため、直接接続できないため、サーバーはクライアントにデータを直接送信できないと思います。クライアントは、IPアドレスを変更する携帯電話である可能性があります。クライアントがリスナーになるために、サーバーがクライアントのIPを知る必要がないことを理解しています。

ありがとうございました

4

2 に答える 2

94

クライアントソケットは着信接続をリッスンせず、サーバーへの発信接続を開始します。サーバーソケットは着信接続をリッスンします。

サーバーはソケットを作成し、そのソケットをIPアドレスとポート番号(TCPおよびUDPの場合)にバインドしてから、着信接続をリッスンします。クライアントがサーバーに接続すると、クライアントとの通信用に新しいソケットが作成されます(TCPのみ)。ポーリングメカニズムは、開いているソケットのいずれかでアクティビティが発生したかどうかを判断するために使用されます。

クライアントはソケットを作成し、リモートIPアドレスとポート番号(TCPおよびUDPの場合)に接続します。ポーリングメカニズム(、、、select()などpoll()epoll()を使用して、スレッドをブロックすることなく、サーバーからの情報についてソケットを監視できます。

クライアントがNAT(ネットワークアドレス変換)を提供するルーターの背後にある場合、ルーターはクライアントのアドレスをルーターのパブリックIPアドレスと一致するように書き換えます。サーバーが応答すると、ルーターはパブリックIPアドレスをクライアントのIPアドレスに戻します。ルーターは、サーバーの応答を正しいクライアントにマップできるように、変換中のアクティブな接続のテーブルを保持します。

于 2012-06-02T10:43:14.773 に答える
0

TCP反復サーバーは、クライアントの接続を受け入れて処理し、クライアントからのすべての要求を完了して、切断します。TCP反復サーバーは、一度に1つのクライアントの要求のみを処理できます。クライアントのすべての要求が満たされた場合にのみ、サーバーは後続の要求を続行できます。1つのクライアントがサーバーを占有している場合、他のクライアントは機能しないため、TCPサーバーが反復サーバーモデルを使用することはめったにありません。

于 2020-11-07T09:29:04.817 に答える