在找到 0x0000 字节后接收 return
recv return after 0x0000 byte found
这是我的代码:
客户
Position pos(1.0,2.0,0.45);
feedback feed(12, pos, 100);
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, feed);
int test = write(tcp_client.sockfd, sbuf.data(),sizeof(sbuf));
服务器:
char* buffer = new char[41];
int test = recv(TCP_server.newsockfd, buffer, 40, MSG_WAITALL );
for (int i=0; i< sizeof(buffer); i++)
std::cout << std::hex << (int)buffer[i] << " ";
std::cout << std::endl;
其他部分代码,连接建立,数据传输成功。
现在的问题是我得到了以下输出:
客户:
ffffff94 b c ffffff93 ffffffca 3f ffffff80 0 0 ffffffca 40 0 0 0 ffffffca 3e ffffffe6 66 66 64
服务器:
ffffff94 b c ffffff93 ffffffca 3f ffffff80 0
遇到第一个0x0000字符后接收数据停止是什么原因?当我发送一个字符串时,一切正常,但在这种特定情况下却不行。
根据记录,recv() doc 帮助不大...
当您调用 recv
时,您应该使用该函数的返回值来确定您应该处理的字节数。
相反,您使用 sizeof(buffer)
来确定循环次数,这是不正确的。 buffer
是 char *
,而 sizeof(char *)
通常是 4 或 8,具体取决于 32 / 64 位。
所以这个:
for (int i=0; i< sizeof(buffer); i++)
应该是:
int test = recv(TCP_server.newsockfd, buffer, 40, MSG_WAITALL );
// assuming that test >= 0
for (int i=0; i < test; i++)
这是我的代码:
客户
Position pos(1.0,2.0,0.45); feedback feed(12, pos, 100); msgpack::sbuffer sbuf; msgpack::pack(sbuf, feed); int test = write(tcp_client.sockfd, sbuf.data(),sizeof(sbuf));
服务器:
char* buffer = new char[41]; int test = recv(TCP_server.newsockfd, buffer, 40, MSG_WAITALL ); for (int i=0; i< sizeof(buffer); i++) std::cout << std::hex << (int)buffer[i] << " "; std::cout << std::endl;
其他部分代码,连接建立,数据传输成功。
现在的问题是我得到了以下输出:
客户:
ffffff94 b c ffffff93 ffffffca 3f ffffff80 0 0 ffffffca 40 0 0 0 ffffffca 3e ffffffe6 66 66 64
服务器:
ffffff94 b c ffffff93 ffffffca 3f ffffff80 0
遇到第一个0x0000字符后接收数据停止是什么原因?当我发送一个字符串时,一切正常,但在这种特定情况下却不行。
根据记录,recv() doc 帮助不大...
当您调用 recv
时,您应该使用该函数的返回值来确定您应该处理的字节数。
相反,您使用 sizeof(buffer)
来确定循环次数,这是不正确的。 buffer
是 char *
,而 sizeof(char *)
通常是 4 或 8,具体取决于 32 / 64 位。
所以这个:
for (int i=0; i< sizeof(buffer); i++)
应该是:
int test = recv(TCP_server.newsockfd, buffer, 40, MSG_WAITALL );
// assuming that test >= 0
for (int i=0; i < test; i++)