1

私はソケットプログラミングに関する例を見つけようとしていて、このスクリプトに出くわしました: http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py

このスクリプトを読んでいると、次の行が見つかりました: listenSocket.listen(5)

私が理解しているように、バッファから5バイトを読み取り、それを処理します...

しかし、相手側から 5 バイト以上が送信された場合はどうなるでしょうか?

そのスクリプトの他の場所では、4 つのコマンドに対して入力をチェックし、文字列に \r\n があるかどうかを確認します。「look」と \r\n のようなコマンドで 5 バイト以上を埋め合わせてはいけませんか?

アラン

4

3 に答える 3

13

以下は一般的なソケットに適用できますが、Python からソケットを使用することに関する特定の質問に答えるのに役立ちます。

socket.listen() はサーバーソケットで使用され、着信接続要求をリッスンします。

listen に渡されるパラメーターはバックログと呼ばれ、accept() の呼び出しが完了するまで、ソケットが受け入れて保留中のバッファーに入れる接続の数を意味します。これは、listen() を呼び出してから、一致する accept() への呼び出しを終了するまでの間、サーバー ソケットへの接続を待機している接続に適用されます。

したがって、あなたの例では、バックログを 5 つの接続に設定しています。

.. バックログを 5 接続に設定すると、次の接続 (6 番目、7 番目など) がドロップされ、接続ソケットは接続エラーメッセージ (「ホストが接続を積極的に拒否しました」メッセージのようなもの)を受け取ります。

于 2009-08-15T19:42:20.710 に答える
0

これはコードを理解するのに役立つかもしれません: http://www.amk.ca/python/howto/sockets/

于 2009-08-15T19:43:31.970 に答える
0

5への引数listenSocket.listenは、読み取りまたはバッファリングするバイト数ではなく、次のものbacklogです。

socket.listen(backlog)

ソケットへの接続をリッスンします。backlog 引数は、キューに入れられた接続の最大数を指定し、少なくとも 1 にする必要があります。最大値はシステムに依存します (通常は 5)。

于 2009-08-15T19:45:13.560 に答える