状況:
ローカルホストの UDP ポート 33100 にバインドされたセンダーソケットがあります。ローカルホストの UDP ポート 33101 にバインドされたレシーバーソケットソケットがあります。
送信側ソケットは 4500 バイトのデータ (文字列 "hello man" * 500) を送信します。レシーバー側には、レシーバーソケットで EPOLLIN イベントを待機する epoll オブジェクトがあります。イベントがあるときは、次のことを行います。
while True:
msg_received = receiver_socket.recv(128)
if msg_received.decode("UTF-8") == "":
break
else:
print msg_received.decode("UTF-8")
問題:
主な問題は、データの最初の 128 バイトを読み取った後、再度読み取ることができないことです。送信者側は、予想どおり 4500 バイトのデータを送信したと言っています。
送信者が同じ 4500 バイトのデータを再度送信すると、EPOLLIN イベントが再度登録され、新しい文字列が読み取られます。どういうわけか、最初の読み取り後にバッファがクリアされます。
送信者が 4500 バイトのデータを送信したばかりですが、最初recv
に 128 バイトのデータがrecv
返され、その後は何も表示されません。
私はおそらく本当にばかげたことをしているので、私に教えてください。4500 バイトのデータをすべて受信したい。