如何向服务器发送4个字节int
,在服务器端将此缓冲区转换为int。
客户方:
void send_my_id()
{
int my_id = 1233;
char data_to_send[4];
// how to convert my_id to data_send?
send(sock, (const char*)data_to_send, 4, 0);
}
服务器端:
void receive_id()
{
int client_id;
char buffer[4];
recv(client_sock, buffer, 4, 0);
// how to conver buffer to client_id? it must be 1233;
}
答案 0 :(得分:10)
您只需将int
的地址转换为char*
,然后将其传递给send
/ recv
。请注意使用htonl
和ntohl
来处理字节序。
void send_my_id()
{
int my_id = 1233;
int my_net_id = htonl(my_id);
send(sock, (const char*)&my_net_id, 4, 0);
}
void receive_id()
{
int my_net_id;
int client_id;
recv(client_sock, &my_net_id, 4, 0);
client_id = ntohl(my_net_id);
}
注意:我保留了缺乏结果检查。实际上,您需要额外的代码来确保send和recv都传输所有必需的字节。
答案 1 :(得分:2)
自互联网开始以来的惯常做法是在Network Byte Order中发送二进制整数(读取大端)。您可以使用htonl(3)
和朋友来完成此操作。
答案 2 :(得分:0)
发送方:
int my_id = 1233;
char data_to_send[4];
memcpy(&data_to_send, &my_id, sizeof(my_id));
send(sock, (const char*)data_to_send, 4, 0);
接收方:
int client_id;
char buffer[4];
recv(client_sock, buffer, 4, 0);
memcpy(&my_id, &buffer, sizeof(my_id));
注意:双方int
的大小和字节顺序必须相同。