2007年9月28日金曜日
IPアドレスが取れない

ある本を使ってお勉強中。
サーバとクライアントのプログラムを作って通信(Telnet)テスト。

本のサンプルどおりにコーディングするも…

(略)

struct sockaddr_in from;
char client_address[80];

(略)

sprintf(client_address, "%d.%d.%d.%d", from.sin_addr.S_un.S_un_b.s_b1, from.sin_addr.S_un.S_un_b.s_b2, from.sin_addr.S_un.S_un_b.s_b3,from.sin_addr.S_un.S_un_b.s_b4);

(以下省略)


test.c:173: error: structure に `S_un' という名前のメンバはありません
test.c:174: error: structure に `S_un' という名前のメンバはありません
test.c:175: error: structure に `S_un' という名前のメンバはありません
test.c:176: error: structure に `S_un' という名前のメンバはありません

…という結果に。

/usr/include を検索(find/grep)しても、見つからない…ということは、そもそもIPのとり方がNGだと考えるしかない。

でもって、探してみるとinet_ntoa()という関数があるらしい。

なので、こう書いてみる。
sprintf(client_address, inet_ntoa(from.sin_addr));


$ gcc test.c 
test.c: In function `MainLoop':
test.c:172: 警告: 引数 2 個の `sprintf' を渡しますにより、キャストなしで整数からポインタを作りまし
$


ありゃ。訂正。
sprintf(client_address, "%s", inet_ntoa(from.sin_addr));


$ gcc test.c
$

無事コンパイル完了。

これが正解なのかどうかは知らないけどね。
同じサーバからtelnetしてみたら、127.0.0.1が来たから問題ないかな~と思ったんだけど??



0 コメント | コメントを書く
Template Design: © 2007 Envy Inc.