У меня есть эхо-сервер на 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 байтов, которые сервер записывает обратно. Журнал сервера показывает две записи (16 + 4). Вывод Python выглядит так
1234567890123456 //recvdata
20
12345678901234567890 //sent data
Я не уверен, почему это происходит, Почему блокировка recv ()
возвращает меньше данных, чем требуется?