我从服务器发送以下数据:
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'符号接收所有数据?
答案 0 :(得分:3)
recv()
不忽略任何字节,更不用说'\0'
个字节。 bytesRcvd
被设置为32这一事实尤其明显,这意味着所有发送的字节都被正确地接收到缓冲区中。所以其他事情正在发生。调试器的缓冲区内容检查窗口很可能实际上忽略了'\0'
个字节。