Python, блокирующий recv, возвращает меньше данных, чем запрошено

У меня есть эхо-сервер на 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 () возвращает меньше данных, чем требуется?

0
задан Wei Shi 15 September 2011 в 22:10
поделиться