发送和接收 int C

新手上路,请多包涵

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

原文由 Becker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
2 个回答

您可以简单地将 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 都传输所有需要的字节。

原文由 Robᵩ 发布,翻译遵循 CC BY-SA 3.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 的大小和两端的字节序必须相同。

原文由 qehgt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题