私は現在、ネットワークに関する基本的なチュートリアルを試行していますが、すべてのデータがクライアントからより多くのデータを読み込もうとすると、クライアント/サーバプログラムがフリーズすることに気付きました受け取った。基本的にこのコードは次のようになります。recvメソッドのpython TCPソケットブロック
def recv_all(sock,length):
data=''
while len(data)<length:
more=sock.recv(length-len(data))
if not more :
raise EOFError('socket inchis %d octeti intr-un mesaj de %d octeti'%(len(data),length))
data+=more
return data
この関数は、クライアントとサーバーの両方から呼び出されますが、サーバーはまずクライアント要求を処理するためにこの関数を使用します。リクエストメッセージが受信されたときに、sock.recvへの2回目の呼び出しまですべてうまく行きます。
次の行にジャンプする代わりに(より多くの0を持つ)、デバッガはただそこでフリーズし、私はその理由が何であるか分かりません。
これは何らかの形で関連がある場合、私のOSはWindows XPです。任意の助けがありがとう、 ありがとう
ソケットはブロックされていませんか? –
これは、ソケットがどのように機能するかのように、デフォルトではブロックされます。 'select'を使って、ソケットに読み込むデータがあるかどうかをチェックしたり、ノンブロッキングIOを使うことができます。 – cha0site
私はrecv(1024)を呼び出すと実際に何が起こり、正確に1024バイトが読み込まれるのでしょうか?それ以上のデータがあるかどうかを知る方法はありませんか? –