新しいタグを作成できないため、この投稿は誤って「送信」とタグ付けされています。
この単純なエコー サーバーについて非常に基本的な質問があります。いくつかのコード スニペットを次に示します。
クライアント
while True:
data = raw_input("Enter data: ")
mySock.sendall(data)
echoedData = mySock.recv(1024)
if not echoedData: break
print echoedData
サーバ
while True:
print "Waiting for connection"
(clientSock, address) = serverSock.accept()
print "Entering read loop"
while True:
print "Waiting for data"
data = clientSock.recv(1024)
if not data: break
clientSock.send(data)
clientSock.close()
これで問題なく動作しますが、クライアントが空の文字列を送信する場合 ("enter data: " に応答してリターン キーを押す) を除きます。この場合、デッドロックのような動作が見られます。
では、ユーザーがクライアント側で return キーを押すと、正確には何が起こるのでしょうか? いくつかのデータが送信バッファーに追加されるのを待っている sendall 呼び出しがブロックされ、recv 呼び出しがブロックされることしか想像できません。何が起きてる?
読んでくれてありがとう!