发送和接收int C ++

时间:2012-05-29 21:08:46

标签: c++ sockets int

如何向服务器发送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;
}

3 个答案:

答案 0 :(得分:10)

您只需将int的地址转换为char*,然后将其传递给send / recv。请注意使用htonlntohl来处理字节序。

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的大小和字节顺序必须相同。