bind 函数通常需要将 IP 地址和端口号转换为网络字节序。这是因为在不同的计算机体系结构上,整数在内存中的布局可能不同,例如在小端字节序和大端字节序的处理器上。因此,为了确保不同主机之间通信的正确性,网络通信协议要求将数据转换为网络字节序。
这里是一个使用 bind 函数的代码示例,其中需要进行字节序转换:
#include
#include
#include
#include
int main() {
int server_socket, client_socket;
struct sockaddr_in server_address, client_address;
socklen_t client_address_len;
// 创建 socket
server_socket = socket(AF_INET, SOCK_STREAM, 0);
// 初始化 server_address
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(8888); // 将端口转换为网络字节序
// 绑定 socket
if (bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听 socket,等待连接
if (listen(server_socket, 5) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 接受连接
client_address_len = sizeof(client_address);
client_socket = accept(server_socket, (struct sockaddr*)&client_address, &client_address_len);
// 关闭 socket
close(server_socket);
close(client_socket);
return 0;
}