ある本を使ってお勉強中。
サーバとクライアントのプログラムを作って通信(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 コメント:
::コメントを投稿する::