6 クライアント-サーバの背景

クライアント-サーバの世界なのです。ネットワーク上のあらゆることが、クライアント・プロセスとサーバ・プロセスとの対話、またはその逆を扱っています。たとえば、telnet を考えてみましょう。ポート 23 のリモートホストに telnet で接続すると(クライアント)、そのホスト上のプログラム(telnetd と呼ばれるサーバ)が起動します。このプログラムは、送られてきた telnet 接続を処理し、ログインプロンプトを表示するなどの設定を行います。

[Client-Server Interaction Diagram]
クライアント-サーバの相互作用

クライアントとサーバ間の情報のやりとりは、上の図のようにまとめられます。

クライアントとサーバのペアは、SOCK_STREAMSOCK_DGRAM、その他(同じことを話している限り)何でも話すことができることに注意してください。クライアントとサーバのペアの良い例としては、telnet/telnetdftp/ftpdFirefox/Apache などがあります。ftp を使うときはいつも、リモートプログラム ftpd があなたにサービスを提供します。

多くの場合、1つのマシンには1つのサーバしかなく、そのサーバは fork() を使用して複数のクライアントを処理します。基本的なルーチンは、サーバが接続を待ち、それを accept() し、それを処理するために子プロセスを fork() する、というものです。これが、次の章で紹介するサンプルサーバが行っていることです。