📅  最后修改于: 2023-12-03 15:25:13.873000             🧑  作者: Mango
在编写网络应用程序时,经常需要将 int 类型的数据写入套接字。本篇介绍如何将 int 类型的数据写入套接字。
将 int 类型的数据转换为字节序列。
在 C 语言中,可以使用 htons
和 htonl
函数将 int 类型的数据转换为网络字节序列。这两个函数分别用于将 16 位整数和 32 位整数转换为网络字节序列。
#include <arpa/inet.h>
int value = 1234;
uint16_t network_order_value = htons(value); // 转换为网络字节序列
uint32_t network_order_value = htonl(value); // 转换为网络字节序列
将网络字节序列写入套接字。
可以使用 send
或 write
函数将数据写入套接字。下面是一个简单的示例:
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建 TCP 套接字
struct sockaddr_in server_addr = {0};
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); // 连接服务器
uint32_t value = 1234;
uint32_t network_order_value = htonl(value);
send(sockfd, &network_order_value, sizeof(network_order_value), 0); // 将数据写入套接字
必须将 int 类型的数据转换为网络字节序列,否则可能因为主机字节序和网络字节序不一致而引起错误。
发送数据时,必须指定正确的数据大小,否则可能会发送不完整的数据或者发送多余的数据。
如果想要接收 int 类型的数据,可以使用相反的方法。即先接收网络字节序列,然后再将其转换为主机字节序。