2013-04-03 37 views
0

我是从服务器发送以下数据:C++的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()小号在写入接收缓冲区期间kips'\ 0'符号

如何接收所有'\ 0'符号的所有数据?

+0

我们需要更多的代码。特别是,填充要发送的缓冲区的代码,调用'send'和调用'recv'后的代码来打印输出。 – 2013-04-03 19:08:16

+0

这怎么可能?它说'bytesRcvd = 32'但接收到的字节存储在'tmpBuff'小于32?我不认为'recv()'实际上在零和非零字节之间有任何区别。 我认为你在做别的错事。 – Javid 2013-04-04 10:59:41

回答

3

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