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

时间:2015-08-31 23:50:09

标签: c++ tcp

我想做的就是通过套接字发送一个整数,但似乎sendto socket命令只接受一个char。我正在努力将我的int更改为char以通过套接字发送它。 request_number是我想要更改为char的哪个是request_char。

我无权访问atoi / atof etc命令,所以在这里我尝试了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命令??在此先感谢您的帮助。如果我需要详细说明,请告诉我。

3 个答案:

答案 0 :(得分:0)

  

我想做的就是通过socket发送一个整数,但似乎sendto socket命令只接受一个char。

错误。它接受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()将其重新置于主机顺序。

答案 1 :(得分:0)

您无需执行转换。套接字可以发送任何类型的数据。只需将int地址转换为char *,并为套接字指定指针和字节数。

答案 2 :(得分:-1)

发送到网络的任何内容都将以字节为单位...因此无符号字节是字符,因此您将发送API视为字符数组。

另一方面,您现在将根据协议[由您定义]接收字节数 当你收到你需要从字节

构造int类型

希望这会有所帮助