С++ winsock (winsock2) recv() пропускает \0 байт

Я отправляю следующие данные с сервера:

31 37 38 33 00 00 00 00 00 00 00 33 34 37 78 35
74 32 71 39 37 34 79 35 74 76 38 35 67 6e 32 6d

на стороне клиента с помощью winsock2.h:

...
int recvbuflen = 32;
char *tmpBuff = new char[recvbuflen];

int bytesRcvd = recv(conn_socket, tmpBuff, recvbuflen, 0);
...

А сейчас:

bytesRcvd = 32;
tmpBuff = {31 37 38 33 33 34 37 78 35 74 32 71 39 37 34 79 35 74 76 38 35 67 6e 32 6d} in hex

в основном recv() пропускает символы '\0' во время записи буфера приема

Как получить все данные со всеми символами '\0'?


person Tengiz    schedule 03.04.2013    source источник
comment
Нам нужно больше кода. В частности, код, который заполняет буфер для отправки, вызов send и код после recv, выводящий вывод.   -  person Dave Rager    schedule 03.04.2013
comment
Как это возможно? Он говорит bytesRcvd = 32, но полученные байты, хранящиеся в tmpBuff, меньше 32? Я не думаю, что recv() на самом деле имеет какое-то значение между нулевыми и ненулевыми байтами. Я думаю, вы делаете что-то еще не так.   -  person Javid    schedule 04.04.2013


Ответы (1)


recv() НЕ игнорирует любые байты, не говоря уже о '\0' байтах. Это особенно видно по тому факту, что bytesRcvd устанавливается равным 32, что означает, что все отправленные байты правильно поступают в буфер. Значит, происходит что-то еще. Скорее всего, окно проверки содержимого буфера вашего отладчика фактически игнорирует '\0' байта.

person Remy Lebeau    schedule 03.04.2013