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);
}
関連ページ
- C言語
- C言語-ソケットプログラミング_ホスト名からIPアドレスを得る
- C言語-ソケットプログラミング_IPアドレスからホスト名を得る
- C言語-ソケットプログラミング_IPアドレス表記の変換
- C言語-ソケットプログラミング_TCPポートスキャン
- C言語-ソケットプログラミング_ブロードキャスト送信
- C言語-ソケットプログラミング_ブロードキャスト受信
- C言語-ソケットプログラミング_マルチキャスト送信
- C言語-ソケットプログラミング_マルチキャスト受信