温馨提示×

Linux sockaddr如何转换格式

小樊
81
2025-01-01 21:21:03
栏目: 智能运维

在 Linux 中,sockaddr 是一个通用结构体,用于表示网络地址

  1. sockaddr_in 转换为 sockaddr
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

// 假设你已经有一个 sockaddr_in 结构体变量
struct sockaddr_in sin;

// 填充 sin 结构体
sin.sin_family = AF_INET;
sin.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &(sin.sin_addr));

// 将 sockaddr_in 转换为 sockaddr
struct sockaddr sa;
memcpy(&sa, &sin, sizeof(sin));
  1. sockaddr 转换为 sockaddr_in
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

// 假设你已经有一个 sockaddr 结构体变量
struct sockaddr sa;

// 填充 sa 结构体
sa.sa_family = AF_INET;

// 将 sockaddr 转换为 sockaddr_in
struct sockaddr_in sin;
memcpy(&sin, &sa, sizeof(sa));

// 现在你可以使用 sin 结构体的成员了
int port = ntohs(sin.sin_port);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(sin.sin_addr), ip, INET_ADDRSTRLEN);

注意:在这些示例中,我们使用了 memcpy 函数来复制内存。这是因为 sockaddrsockaddr_in 结构体的大小可能不同(例如,sockaddr_in 包含一个额外的 sin_len 成员)。在使用这些方法时,请确保正确处理结构体的大小。

0