5

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

3 回答 3

11

您可以简单地将您的地址int转换为char*并将其传递给send/ recv。注意使用htonlandntohl来处理字节序。

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 都传输所有需要的字节。

于 2012-05-29T21:16:08.720 回答
2

自互联网诞生以来,通常的惯例是以网络字节顺序(读取大端)发送二进制整数。您可以使用htonl(3)和朋友这样做。

于 2012-05-29T21:16:41.010 回答
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两边的大小和字节序必须相同。

于 2012-05-29T21:15:13.713 回答