質問: socketserver.threadingtcpserver(('', int(sys.argv[1])),test) launch.allow_reuse_address= true; launch.serve_forever() クライアントが同じ送信元ポートを介して複数のリクエストを送信したが、サーバーがスタックした場合、どんな助けでも大歓迎です、ありがとう!
回答: larry hastingsの答えには、ソケットに関する一般的なアドバイスがいくつかありますが、pythonソケットモジュールでのrecv(bufsize)メソッドの動作に関係するいくつかの間違いがあります。それで、明確にするために、これは助けを求めてこれを探している他の人にとって混乱するかもしれないので: recv(bufsize)メソッドのbufsizeパラメーターはオプションではありません。 recv()(paramなし)を呼び出すと、エラーが発生します。 recv(bufsize)のbufferlenは、maximumサイズです。使用可能なものが少ない場合、recvはより少ないバイトを喜んで返します。 詳細については、 ドキュメント を参照してください。クライアントからデータを受信していて、すべてのデータをいつ受信したかを知りたい場合は、larryが提案しているように、おそらくそれをプロトコルに追加する必要があります。メッセージの終わりを判断するための戦略については、 このレシピ を参照してください。そのレシピが指摘しているように、一部のプロトコルでは、クライアントはデータの送信が完了すると単純に切断します。これらの場合、while trueループは正常に機能するはずです。クライアントがnot切断した場合、コンテンツの長さを通知する方法、メッセージを区切る方法、またはタイムアウトを実装する方法を見つける必要があります。正確なクライアントコードとテストプロトコルの説明を投稿できる場合は、さらにお手伝いさせていただきます。