研究報告 vol.2

谷口 義樹 -Yoshiki TANIGUCHI-

yoshiki@mikilab.doshisha.ac.jp

ソケット通信プログラミング

研究報告日:2002/05/31

現在の目標

現在の進捗状況

ソケット通信とは
ソケットとは,ネットワークを介して他のホストに接続する際に用いられる「接続の端点」である.
2つのプログラム間でデータのやりとりをするデータの入出力口として用いられる.
ソケットはその使い方にも特徴があり,ソケットを介してデータを送受信するときには,
ファイルの入出力と同じ要領で行うことができる.
つまり,送信したいデータをソケットに書き込むと通信相手のコンピュータのソケットに届く.
また,受信はソケットからデータを読み出せばよい.
つまり,ファイルの入出力とまったく同じ方法で,異なる2つの端末間でデータのやりとりができる方法が,ソケット通信である.


ソケット通信の仕組みを理解するために,TCPを用いた簡単なプログラミングを行った.
TCPによるデータ通信の手順は次のfig.1のようになる.



fig.1 TCPによるデータ通信手順



具体的に作成したプログラムは,クライアントがある文字列をサーバーに投げると,サーバーがその文字列を全て大文字にして,
クライアントに返すというものである.


次に,マルチクライアントに対応するため,プログラムの改良を行った.
マルチクライアントを実現するための方法としては,forkを用いた.

forkとは,新しいプロセスを作成するUNIXのシステムコールである.
forkの呼び出しにより,forkを呼び出した時点の親プロセスと等価な子プロセスが作成される.
forkの呼び出しの返り値を調べることにより,親と子に異なるコード経路を指定することができる.
forkの呼び出しは,子には常に0を返し,親には子のPIDを返す.



fig2. forkのしくみ

<実行結果>
:server side
yoshiki@yoshiki:~$ ./server

:client side
yoshiki@cambria:~$ ./client 192.168.6.145
test
TEST
hello
HELLO

yoshiki@forte:~$ ./client 192.168.6.145
yes
YES

今後の課題

forkを用いるとメモリが共有でないので,目標とするチャットの作成を行うにはかなりコードが複雑になってしまう.
次の段階として,forkを用いる代わりにPOSIXスレッド(pthread)を用いたプログラミングを行う.
スレッドは同じメモリスペースを共有する.
よって,メモリ内の同じ変数にアクセスすることができ,宣言済みのグローバル変数を読み書きすることができる.

次回までの目標


Yoshiki TANIGUCHI