如何在C ++ TCP套接字上安全地传输int16_t?在下面的代码中,服务器似乎没有收到正确的值,我的猜测是因为没有为int16_t定义htonl / ntohl。
客户端:
void client(int16_t value, int socket) {
int16_t _value = htonl(value);
write(socket, _value, sizeof(int16_t));
}
服务器:
int16_t server(int16_t buf, int16_t value, int socket) {
recv(socket,&buf,sizeof(int16_t));
value = ntohl(buf);
return value;
}
答案 0 :(得分:3)
当您使用短版本ntohl()
和htonl()
时,您正在使用长版本ntohs()
和htons()
。
专业提示:确保检查write()和recv()的返回值(并考虑使用带有read()的write()或带有recv()的send(),因为这些是更常见的配对。 / p>