2024年3月22日发(作者:)
linux struct sockaddr 打印
在 Linux 编程中,`struct sockaddr` 通常用于表示网络地址信息。为了打印 `struct sockaddr`
中的信息,你可能需要转换其成员为更具体的类型,如 `struct sockaddr_in` 或 `struct
sockaddr_in6`,然后进行打印。
下面是一个简单的示例,展示如何打印 `struct sockaddr_in` 中的 IP 地址和端口号:
```c
#include
#include
void printSockAddr(const struct sockaddr *addr) {
if (addr->sa_family == AF_INET) {
struct sockaddr_in *addr_in = (struct sockaddr_in *)addr;
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr_in->sin_addr), ip, INET_ADDRSTRLEN);
printf("IP Address: %sn", ip);
printf("Port: %dn", ntohs(addr_in->sin_port));
} else if (addr->sa_family == AF_INET6) {
struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr;
char ip[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &(addr_in6->sin6_addr), ip, INET6_ADDRSTRLEN);
printf("IP Address: %sn", ip);
printf("Port: %dn", ntohs(addr_in6->sin6_port));
} else {
printf("Unsupported address familyn");
}
}
int main() {
struct sockaddr_in addr;
_family = AF_INET;
_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &(_addr));
printSockAddr((struct sockaddr *)&addr);
return 0;
}
```
在这个例子中,`printSockAddr` 函数接收一个指向 `struct sockaddr` 的指针,并根据地址家
族(address family)判断是 IPv4 还是 IPv6 地址,然后使用 `inet_ntop` 函数将二进制地址
转换为可读的字符串形式,并打印 IP 地址和端口号。
请注意,这只是一个基本的例子,实际中你可能需要更全面地处理错误、不同的地址家族等
情况。
发布评论