C プログラム (ソケット通信)

ネットワークプログラミングの分野では,ソケット (Socket) とはプログラム間でデータの送受信を行うための標準的なプログラミングインターフェイス (API) を指します.UNIX 系 OS で最初に用いられましたが,現在では通信をを実現する標準のインタフェイスとしてほとんどの OS に実装されています.

ソケットの仕組みに則ってプログラムを記述すれば,具体的な通信手段や手順の詳細を知らなくても通信機能が実装できます.このとき,通信相手の種類や仕様に合わせて通信を行うコードを記述する必要はありません.

ソケットはプログラム間でのデータ転送と受信のみを行うものであり,データの中身には関知せずにバイト列をそのまま転送します. データの内容を規定したり解釈するのは,ソケット通信を使う上位のプログラムの役目です. 送信されてくるデータのメッセージフォーマットを規約化することで,受信側プログラムはデータを解析したり,内部的にフォーマット変換を行うことなどが可能になります.

ここでは,TCP/IP を使用してネットワーク通信 (ソケット通信) を行うプログラムのサンプルを示します.サーバとクライアント間で簡単な通信を行うプログラムです.

TCP サーバ

TCP サーバ機能を実現するサンプルプログラムです.ソースプログラムは,server.c です.

プログラムはコマンドとして起動するもので,仕様は以下です.

 server [port_no]
  パラメータ:
    port_no : 通信ポート番号(省略時は,5000)

プログラムは,以下の機能を実行します.

  1. socket システムコール を実行し, TCPソケットを作成する.
  2. bind システムコール を実行し,ソケットにポート番号を割り当てる.
  3. listen システムコール を実行し,指定されたポート番号のソケットを接続待ちソケットとする.
  4. クライアントからの接続要求に対し,acceptシステムコールにより新しいソケットを取得する.
  5. ソケットを介してクライアントと通信を行う.
    クライアントから受信したデータを表示する.
  6. クライアントからの受信終了後,close システムコールを実行する.

TCP クライアント

TCP クライアント機能を実現するサンプルプログラムです.ソースプログラムは,client.c です.

プログラムはコマンドとして起動するもので,仕様は以下です.

client host_address [port_no]
  パラメータ:
    host_address : サーバのホスト名または IP アドレス
    port_no : 通信ポート番号(省略時は,5000)

プログラムは,以下の機能を実行します.

  1. socket システムコール を実行し, TCPソケットを作成する.
  2. connect システムコール を実行し,指定されたサーバに接続する.
  3. ソケットを介してサーバにデータを送信する.
    1 秒毎に指定されたメッセージを 10 回送信する.
  4. close システムコールを実行し,サーバとの接続を終了する.

実行時の注意点は,以下です.

inserted by FC2 system