ZBLOG

C语言打印sockaddr结构体中的端口号和地址参数

在C语言中,可以使用以下方法打印出sockaddr结构体中的端口号和地址参数:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>

void print_sockaddr(struct sockaddr* sa) {
    if (sa->sa_family == AF_INET) { // IPv4
        struct sockaddr_in* sa_in = (struct sockaddr_in*)sa;
        char addr_buf[INET_ADDRSTRLEN];
        const char* addr_str = inet_ntop(AF_INET, &(sa_in->sin_addr), addr_buf, INET_ADDRSTRLEN);
        if (addr_str != NULL) {
            printf("IPv4 Address: %s\n", addr_str);
        }
        printf("Port: %d\n", ntohs(sa_in->sin_port));
    } else if (sa->sa_family == AF_INET6) { // IPv6
        struct sockaddr_in6* sa_in6 = (struct sockaddr_in6*)sa;
        char addr_buf[INET6_ADDRSTRLEN];
        const char* addr_str = inet_ntop(AF_INET6, &(sa_in6->sin6_addr), addr_buf, INET6_ADDRSTRLEN);
        if (addr_str != NULL) {
            printf("IPv6 Address: %s\n", addr_str);
        }
         printf("Port: %d\n", ntohs(sa_in6->sin6_port));
    } else {
        printf("Unknown address family\n");
    }
}

int main() {
    struct sockaddr_in server_addr; // 假设使用的是IPv4地址结构

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8080); // 设置端口号为8080
    inet_pton(AF_INET, "127.0.0.1", &(server_addr.sin_addr)); // 设置IPv4地址为127.0.0.1

    print_sockaddr((struct sockaddr*)&server_addr);

    return 0;
}

上述代码中,print_sockaddr函数用于打印sockaddr结构体中的端口号和地址参数。首先,根据sa_family字段判断是IPv4还是IPv6地址结构。然后,使用inet_ntop函数将二进制地址转换为可读字符串形式,并使用ntohs函数将网络字节序的端口号转换为主机字节序。最后,在主函数中创建一个示例的sockaddr_in结构体并调用print_sockaddr函数进行打印测试。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=2102

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?