在TCP套接字连接上发送int值

Sending an int value on a TCP socket connection

本文关键字:int TCP 套接字 连接      更新时间:2023-10-16

我想做的就是通过套接字发送一个整数,但似乎sendto套接字命令只接受一个字符。我正在努力改变我的int成一个字符通过套接字发送它。request_number是int,我想把它转换成字符,也就是request_char。

我无法访问atoi/atof等命令,所以这里我尝试了sprintf。但是当我运行时,它什么也不做,甚至不会输出值。我的sprintf命令做错了什么?或者当在tcp套接字上发送int时,是否有其他方法可以避免这种转换?

 int request_number= 100;
 char request_char[request_number];
    sprintf(request_char, "%i", request_number); 
    send(tcp_new_socket , request_char , strlen(request_char) , 0);

另外,当我在套接字的另一端接收到该值时,如何将其转换回int类型?相同类型的sprintf命令??提前感谢任何帮助。

所有我想做的是通过套接字发送一个整数,但似乎sendto套接字命令只接受一个字符。

是错误的。它接受一个char *

我正在努力将我的int转换为通过套接字发送的char。

你当然是。int不适合char,你不需要这样做。只需提供int的地址并将其转换为char *

int request_number= 100;
char request_char[request_number];
sprintf(request_char, "%i", request_number); 
send(tcp_new_socket , request_char , strlen(request_char) , 0);

这段代码与你给的描述不一致。这里没有任何东西可以将int转换为char。有代码将其转换为char[] 数组,作为ASCII发送,但这不是你说你想做的。只发送二进制的int:

int request_number = 100;
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0);

,而接收方则相反。但是你应该按网络字节顺序发送int:

int request_number = htons(100);
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0);

并在接收端使用ntohs()将其恢复到主机顺序

您不需要执行转换。套接字可以发送任何类型的数据。只需将int地址强制转换为char*,并将指针和字节计数提供给套接字。

发送到网络的任何内容都将以字节为单位…所以unsigned bytes是char,所以你看到send API是char数组。

在另一边,你现在将接收基于协议的字节[由你定义]接收时,需要从字节

构造int类型

希望能有所帮助