这是我的代码:
客户
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并没有多大帮助......
答案 0 :(得分:2)
当你调用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++)