Ami*_*dar 3 c c++ sockets linux c++11
我正在写一个c ++客户端.客户端使用TCP协议成功连接到服务器并发送数据.我写下面的代码来接收数据:
char data[9];
int received_size = recv(fd, data, 9, flags);
std::string str{ data };
// str.empty() is true
Run Code Online (Sandbox Code Playgroud)
哪些标志是MSG_NOSIGNAL.
问题是在执行此行之后,received_size为9但数据长度为零.
如果recv返回一个值,那么这就是接收的字节数.
问题是您使用了错误的函数来确定您正在接收的数据.std::string无论recv返回的实际字节数是多少,您使用的构造函数都将在第一个空字节处停止.
相反,使用std::string占用字节长度的其他版本的构造函数:
char data[9];
int received_size = recv(fd, data, 9, flags);
std::string str(data, received_size);
Run Code Online (Sandbox Code Playgroud)