在C中通过TCP发送和接收整数值

在程序中,我需要通过TCP套接字发送一个整数值。 我为此目的使用了send()recv()函数,但它们只是以字符串forms发送和接收它。

是否有send()recv()替代方法,以便发送和接收整数值?

send()recv()不发送字符串。 他们发送字节 。 您需要提供有意义的字节解释。

如果您希望发送整数,则需要确定要发送的整数大小 – 1个字节,2个字节,4个字节,8个字节等。您还需要确定编码格式 。 “网络顺序”描述了Big-Endian格式的约定。 您可以使用的以下函数转换为网络顺序和从网络顺序转换:

  uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort); 

如果您在接收(网络到主机,长)之后发送(主机到网络,长)和ntohl() htonl()之前坚持使用htonl() ),那么你就可以了。

当然,您可以将整数作为四个字节发送(或者整数恰好是多少字节); 但你必须要小心。 请参阅系统中提供的函数htonl() ,可能在

假设一个四字节整数n,这可能会做你想要的:

 uint32_t un = htonl(n); send(sockfd, &un, sizeof(uint32_t), flags); 

然后你可以在接收端编码补码。

调用htonl()的原因是最高位字节通常首先通过Internet传输,而某些计算机体系结构(如无处不在的x86)首先存储最低位字节。 如果你不修复字节顺序,并且一端的机器是x86,而另一端的机器是其他的,那么没有htonl() ,整数将通过乱码。

顺便说一下,我不是这个主题的专家,但是如果没有专家的答案,这个答案可能会有用。 祝好运。

我也试过了。 但写不起作用。 所以我找到了另一个解决方

 // send char integer[4]; // buffer *((int*)integer) = 73232; // 73232 is data which I want to send. send( cs, integer, 4, 0 ); // send it // receive char integer[4]; // buffer recv( s, integer, 4, 0 ); // receive it