トップページ > コンテンツ > プログラミング入門 > C言語入門 > Cネットワークプログラミング

http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/socket.html
http://x68000.q-e-d.net/~68user/net/c-http-1.htmlのサイトが分かりやすい。
ソケット通信は基本サーバー側のポート番号を指定すれば、クライアント側のポート番号は
OSで勝手に割り振る仕組みになっているはず。

基本的にLinux系はsys/socket.h、Windows系はwinsock2.h等を使う。
windows系の場合は、ws2_32.lib(gccなら-lws2_32のオプション追加)を追加する必要があるので注意。
また、上記サイトを試してみたところ、intの宣言不足等、記入漏れが有りそうなので注意。

Linuxの場合は
サーバー側
socket→ソケットの生成
setsockopt→ソケットのオプション
sockaddr_in 構造体.sin_familyの設定→アドレスファミリの指定。通常はAF_INET
sockaddr_in 構造体.sin_addrの設定→htonl(INADDR_ANY)
sockaddr_in 構造体.sin_port→ポート番号設定。htons(ポート番号)
bind→ソケットのバインド
listen→OSに接続を受け付けるように指令する
accept→接続を受ける
close→ソケットを閉じる

signal関数を使うとsignalを受け取ったときの処理を行うことができます。
参考:http://7ujm.net/linux/signal.html

クライアント側
getopt→オプション取得
sockaddr_in 構造体.sin_familyの設定→アドレスファミリの指定。通常はAF_INET
getservbyname(サービス変数,サービス名)→サービスのポート番号取得
sockaddr_in 構造体.sin_port→ポート番号設定。htons(ポート番号)
inet_addr(ホスト名)→ホスト名アドレスを文字列表現にする
gethostbyname(ホスト名)→ホスト名からホスト情報取得
socket→ソケットの生成
connect→接続
close→ソケットを閉じる
の流れでソケット接続を行う。
最終更新:2011年04月02日 16:27