6 クライアント-サーバの背景
クライアント-サーバの世界なのです。ネットワーク上のあらゆることが、クライアント・プロセスとサーバ・プロセスとの対話、またはその逆を扱っています。たとえば、telnet
を考えてみましょう。ポート 23 のリモートホストに telnet
で接続すると(クライアント)、そのホスト上のプログラム(telnetd と呼ばれるサーバ)が起動します。このプログラムは、送られてきた telnet
接続を処理し、ログインプロンプトを表示するなどの設定を行います。
クライアントとサーバ間の情報のやりとりは、上の図のようにまとめられます。
クライアントとサーバのペアは、SOCK_STREAM
、SOCK_DGRAM
、その他(同じことを話している限り)何でも話すことができることに注意してください。クライアントとサーバのペアの良い例としては、telnet
/telnetd
、ftp
/ftpd
、Firefox
/Apache
などがあります。ftp
を使うときはいつも、リモートプログラム ftpd
があなたにサービスを提供します。
多くの場合、1つのマシンには1つのサーバしかなく、そのサーバは fork()
を使用して複数のクライアントを処理します。基本的なルーチンは、サーバが接続を待ち、それを accept()
し、それを処理するために子プロセスを fork()
する、というものです。これが、次の章で紹介するサンプルサーバが行っていることです。