C のエコー サーバーと Python のテスト クライアントがあります。サーバーの読み取りバッファは制限されています (例: 16 バイト)。クライアントが 16 バイトを超える送信を行う場合、最初に 16 を読み取り、クライアントに書き戻してから再度読み取ります。
サーバーを でテストしたtelnet
ところ、16 バイトを超えていても、入力と同じ文字列が返されました。ただし、この Python クライアントは機能しません。
//data is initialized to be 20 bytes data
Len = 20
sock.setblocking(1)
sock.send(data)
recvdata = sock.recv(Len)
if(recvdata != data):
print recvdata.encode('hex')
print Len
print data.encode('hex')
このクライアントは、サーバーが書き戻す最初の 16 バイトのみを受け取ります。サーバー ログには 2 回の書き込み (16 + 4) が表示されます。Pythonの出力は次のようになります
1234567890123456 //recvdata
20
12345678901234567890 //sent data
なぜこれが起こっているのかわかりません.ブロッキングrecv()
が要求されたよりも少ないデータを返すのはなぜですか?