C言語-ソケットプログラミング_IPアドレス表記の変換

IPアドレスの表記について

バイナリ表記について

ソケットプログラミングでは、IPアドレスをバイナリ表記(ネットワークバイト順)で扱います。

アスキー文字列(ドット区切りの10進数表記、192.168.24.1など)のIPアドレスを表示するには、変換処理が必要になります。


10進数表記の文字列としてのIPアドレスを指定する場合には、バイナリ表記に変換する必要があります。

例えば、クライアント側でサーバのIPアドレスを指定する場合には以下のようにinet_addr()関数を用いて、変換します。


memset(&sv_addr, 0, sizeof(sv_addr));
sv_addr.sin_family = AF_INET;
sv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
sv_addr.sin_port = htons(12300);

プログラム


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

/*!
 * @brief     IPアドレス表記を変換する
 * @param[in] str_addr IPアドレス(xx.xx.xx.xx表記の文字列)
 */
static void
convert(char *str_addr)
{
    struct in_addr addr;
    char *cp = NULL;

    /* Ascii To Network */
    inet_aton(str_addr, &addr);
    printf("%s = %x\n", str_addr, addr.s_addr);

    /* network to ascii */
    cp = inet_ntoa(addr);
    printf("%x = %s\n", addr.s_addr, cp);
}

/*!
 * @brief   main routine
 * @return  成功ならば0、失敗ならば-1を返す。
 */
int
main(int argc, char *argv[])
{
    int rc = 0;

    if(argc != 2){
        fprintf(stdout, "%s <ip address>\n", argv[0]);
        return(-1);
    }

    convert(argv[1]);

    return(0);
}


関連ページ