ページ 11

IPアドレス取得

Posted: 2010年4月08日(木) 18:21
by ひょう
wsock32.libの質問をした
ひょうです。

IPアドレスを取得ところで早速つまずいてしまいました・・・


-------------------------------------------------------
scanf("%s",&host);

/*ソケット初期化*/
ret = WSAStartup(0x0101, &wsaData);
if(ret != 0){
printf("Socket initialization ERROR.\n");
}else{
printf("Socket initialization OK.\n");
}
hostent = gethostbyname(host);
printf("%s",hostetn->h_addr);
--------------------------------------------------------
※struct hostent *hostent は最初に定義しているものとします。

ためしに"www.yahoo.co.jp"と入力してみましたが
よくわからない文字列になって返ってきました。。。

どのようにすればIPアドレスを取得することが出来るのでしょうか?

Re:IPアドレス取得

Posted: 2010年4月08日(木) 18:32
by softya
hostetn->h_addr
は文字列ではなく数値データです。
なので、
printf("%d.%d.%d.%d",hostetn->h_addr[0],hostetn->h_addr[1],hostetn->h_addr[2],hostetn->h_addr[3]);
で良かったと思いますが。
記憶違いだったらごめんなさい。

Re:IPアドレス取得

Posted: 2010年4月08日(木) 18:57
by ひょう
私も%dをやってみたのですが
-51など負の数が出てしまうことがありました・・・

Re:IPアドレス取得

Posted: 2010年4月08日(木) 19:23
by softya
あっ、失礼しました。char型(-128~127)でしたね。
(unsigned int)でキャストしてください。0~255のデータになります。

Re:IPアドレス取得

Posted: 2010年4月08日(木) 19:40
by たかぎ
> (unsigned int)でキャストしてください。0~255のデータになります。

unsigned charですよね。

Re:IPアドレス取得

Posted: 2010年4月08日(木) 20:21
by softya
あっ、すいません2度ボケです。たかぎさん、ありがとうございます。
(unsigned char)
ですね。申し訳ないです。

Re:IPアドレス取得

Posted: 2010年4月09日(金) 01:31
by ひょう
できない・・・

unsigned char IPaddr[7];
宣言したあと
IPaddr[0] = (unsigned char)hostent->h_addr[0];
IPaddr[1] = '.';
IPaddr[2] = (unsigned char)hostent->h_addr[1];
IPaddr[3] = '.';
IPaddr[4] = (unsigned char)hostent->h_addr[2];
IPaddr[1] = '.';
IPaddr[6] = (unsigned char)hostent->h_addr[3];
こんな感じで書いて
printf("%s",IPaddr);
で表示させようとしましたが
どうもうまくいきませんでした。
%dでやってみたりfor文で%cを使ってみたり
いろいろやってみましたがどれもうまくいきません・・・

どこが間違っているのでしょうか?

Re:IPアドレス取得

Posted: 2010年4月09日(金) 02:02
by ひょう
すみません自己解決しました。
memcpy(&inaddr,hostent->h_addr_list[0],4);
strcpy(szIP,inet_ntoa(inaddr));
このようにしました。

ご教示してくださった方々、ありがとうございました。

これからもお世話になります。