【问题标题】:How should I print server address我应该如何打印服务器地址
【发布时间】:2012-03-24 08:01:46
【问题描述】:
    int server_sockfd, client_sockfd; //server and client filedescriptors
    socklen_t server_len, client_len; 
    struct sockaddr_in server_address; //server address
    struct sockaddr_in client_address; //client address
    int server_port = 10000;
    char *def_server_address ="127.0.0.1";

    server_len = sizeof(server_address);
    memset(&server_address, 0, server_len );
    server_address.sin_family = AF_INET;

    if (x == 1) {
        server_address.sin_addr.s_addr = INADDR_ANY;}
    else {
        server_address.sin_addr.s_addr = inet_addr(def_server_address);
    }
    server_address.sin_port = htons(server_port);

我应该如何从 server_address 打印服务器的地址?使用 printf。

【问题讨论】:

    标签: c ip-address printf


    【解决方案1】:

    使用inet_ntop() 将其转换为字符串

    该函数将af中的网络地址结构src转换为 地址族转换成字符串。结果字符串是 复制到 dst 指向的缓冲区,该缓冲区必须为非空 指针。调用者指定此中可用的字节数 参数大小中的缓冲区。

    inet_ntop() 扩展了 inet_ntoa(3) 函数以支持多个 地址族,inet_ntoa(3) 现在被认为在 赞成 inet_ntop()。

    【讨论】:

      【解决方案2】:

      这对我有用:

      struct sockaddr_in sa;
      char buffer[INET_ADDRSTRLEN];
      inet_ntop( AF_INET, &sa.sin_addr, buffer, sizeof( buffer ));
      printf( "address:%s\n", buffer );
      

      AF_INET 用于表示 sin_addr 指向 IPv4 网络地址。结果字符串被复制到缓冲区变量。您应该在 inet_ntop() 的最后一个参数中指定缓冲区中可用的字节数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-11
        • 2013-11-05
        • 2021-02-22
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 2018-02-28
        相关资源
        最近更新 更多