C++ 在TCP套接字连接上发送int值
我只想通过套接字发送一个整数,但sendtosocket命令似乎只接受一个字符。我正在努力将int转换成char,以便通过套接字发送它。request_number是我想要转换成字符的int,它是request_char 我没有访问atoi/atof etc命令的权限,所以在这里我尝试了sprintf。但当我运行它时,它什么也不做,甚至不会打印出值。我的sprintf命令有什么错?或者,在tcp套接字上发送int时,是否有其他方法可以避免这种转换C++ 在TCP套接字连接上发送int值,c++,tcp,C++,Tcp,我只想通过套接字发送一个整数,但sendtosocket命令似乎只接受一个字符。我正在努力将int转换成char,以便通过套接字发送它。request_number是我想要转换成字符的int,它是request_char 我没有访问atoi/atof etc命令的权限,所以在这里我尝试了sprintf。但当我运行它时,它什么也不做,甚至不会打印出值。我的sprintf命令有什么错?或者,在tcp套接字上发送int时,是否有其他方法可以避免这种转换 int request_number= 100
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命令??提前感谢您的帮助。如果需要详细说明,请告诉我。发送到网络的任何内容都将以字节为单位。。。所以无符号字节是字符,所以您可以看到发送API是字符数组 另一方面,您现在将根据协议[由您定义]接收字节 当您收到时,您需要从字节构造int类型 希望这有帮助 我只想通过套接字发送一个整数,但sendtosocket命令似乎只接受一个字符 错。它接受一个
字符*
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,以便通过套接字发送它
你当然是。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*,并为套接字提供指针和字节计数。在实现协议之前,您需要设计一个协议。请查看TCP之上的其他协议(如HTTP、IRC或SMTP)的规范,以了解应该如何做到这一点。为什么是downvote?请解释我提供了为什么网络api是字节数组以及在接收端要做什么的详细信息。。