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' 符号的数据?

4

1 回答 1

3

recv() 忽略任何字节,更不用说'\0'字节了。设置为 32的事实尤其明显bytesRcvd,这意味着所有发送的字节都被正确接收到缓冲区中。所以其他事情正在发生。您的调试器检查缓冲区内容的窗口很可能是实际上忽略'\0'字节的窗口。

于 2013-04-03T19:13:29.420 回答