<背景>
pythonでソケット通信の勉強をしています。
recv()のバッファサイズについて、よく参考書では1024バイトなどが固定で指定されていますが、仮にバッファよりも大きいデータが来た場合,対応するにはどうしたらよいかという疑問に行きつきました。
そこで、recv()をループさせて、とりあえず1バイトずつ読み取って、最後に合算したデータをクライアントに送信できないかと思い、以下のプログラムを書いてみました。
<ご質問内容>
recv()をwhileでループして、データを「data_total」変数に足し合わせていき、最後までデータを読んだところで、まとめてクライアントに送りたいのですが、以下のプログラムではrecvで最後まで読んだ後に、「if not data:」の条件文までいかずに、recv()で止まってしまいます。
どのようにしたらrecv()で止まらずに「if not data:」の条件文でブレイクできるでしょうか。
ご教示の程何卒よろしくお願い致します。
python
1#server側 2import socket 3 4def server(): 5 with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s: 6 s.bind(("127.0.0.1",8888)) 7 s.listen(1) 8 conn,addr = s.accept() 9 with conn: 10 data_total = "".encode() 11 while True: 12 data = conn.recv(1) 13 print("data:{}".format(data)) 14 data_total += data 15 if not data: 16 conn.sendall(data_total) 17 break 18 19if __name__ == '__main__': 20 server()
python
1# client側 2import socket 3 4with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 5 s.connect(('127.0.0.1', 8888)) 6 s.sendall(b'test_message') 7 data = s.recv(1024) 8 print(repr(data))
回答2件
あなたの回答
tips
プレビュー