Socketとは、プログラムがネットワークを利用するためにOSに依頼する窓口なるAPI郡で、OSI参照モデルでセッション層の役割を果たすプログラミングインターフェイスです。このテキストではTCP/IPの基礎知識があるという前提の下で解説を行います。Socketとは簡単に言えばTCP/IPをプログラムから利用するための出入り口のようなものです。
SocketはTCP/IPのトランスポート層の上位層にあたります。アプリケーションはソケットAPIを介してトランスポート層以下のプロトコルを利用します。Socketはトランスポート層でTCPを使うかUDPを使うかの指定をすることができ、TCPは信頼性が必要な通信に使い、UDPは速さが要求される場合に使用します。利用できる下層のプロトコルは2つありますが、この2つ指定の仕方はごく簡単で利用するに当たっての手順にもさほどの違いはありません。
ネットワークモデルにはサーバ・クライアント方式とピアツーピア方式があります。サーバ・クライアント方式はWWWのように、端末の一方がサービスを提供しもう一方の端末がサービスを要求するネットワークモデルです。ピアツーピアは全ての端末が対等な立場でサービスを提供または要求するネットワークモデルです。サーバ・クライアント方式は機能の拡張やメンテナンスが容易ですが設置にコストがかかります。ピアツーピア方式は機能拡張などを行う際には全ての端末のプログラムをアップグレードする必要がありますが、基本的には低コストで構築できます。
このテキストではサーバ・クライアント方式のプログラムを解説します。Socketプログラミングにおいてサーバとクライアントのお決まりの部分の違いはあまり大きなものではありません(処理内容は異なります)。
UNIXはもともとその歴史からSocket通信に非常に特化したOSです。また、TCP/IPはUNIXを中心に発展し、世界基準になった経緯があるため、UNIXとSocketとの間には強い関連性があり、OSレベルでSocketをサポートしています。そのためにSocketをファイルと同等に扱うことができます。
一方WindowsではUNIXのSocketに対応するためにWinsockというライブラリを使用して互換性を実現しています。WinSockを使えばUNIXのSocketを用いたプログラムがWindowsでも利用できます。ただし、WinSockは一部のシステムコールが用意されていなかったり、動作が違うものもあります。例えば、データの送受信に利用するwriteやreadなどに違いがあります。また、Socketを閉じる時にUNIXではSocketをファイルと同等に扱うため、ファイルを閉じるcloseを呼び出しますが、WinSockではその代わりにclosesocketという特別なAPIを利用する必要があります。
こういった違いこそあれど、大まかな手順はUNIXでもWindowsでも変わりありませんので、あまり違いを気にする必要はありません。