如何通过TCP套接字发送int16_t?

时间:2014-05-27 12:17:45

标签: c++ sockets tcp stdint

如何在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;
}

1 个答案:

答案 0 :(得分:3)

当您使用短版本ntohl()htonl()时,您正在使用长版本ntohs()htons()

专业提示:确保检查write()和recv()的返回值(并考虑使用带有read()的write()或带有recv()的send(),因为这些是更常见的配对。 / p>