WinSockとは?
ソケットプログラミング
Microsoft Windows システムにおいて、ネットワークプログラミングを語るのであれば
やはり WinSock の存在を無視することはできません
WinSock とは Windows Sockets API のことを表しています
他の Win32 API 同様に DLL ファイルにその機能がパックされています
これを利用することで、高度なネットワークアプリケーションを実現することができます
WinSock は、Windows API の思想にのっとり、ベンダーやハードウェアの API を隠蔽し
物理ネットワークに影響しないように、抽象化の役割を持ちます
これは、GDI と同様の設計思想であり、開発者はベンダーを気にする必要がなく
WinSock API に準拠した実装であれば、アプリケーションは同様の通信が行えるのです
最初 WinSock は、TCP/IP プロトコルのために開発されましたが
その後もバージョンアップを重ね、現在ではプロトコルに依存しない
WinSock 2 が主流として使われるようになっています
WinSock 対応のアプリケーションを開発するためには、Windows 用 C コンパイラと
WSOCK32.DLL ファイル、及び WS2_32.DLL が存在する環境が必要です
また、ネットワークに接続されている Windows コンピュータが必要となります
基本的に、多くのプログラムはクライアント/サーバープログラムとなるため
ネットワークアプリケーションというのは、クライアントソフトとサーバーソフト
これら二つがそろって、ひとつの完成されたサービスとなるのです
この講座では WinSock の機能や、これを使ったプログラミングを解説することが目的であり
原則として、ネットワークや TCP/IP については解説しない方針です
これらのシステムに依存しない技術については、別項目として学習してください
Berkeley の継承
WinSock API は、まったくゼロから作られたものではありません
実は、この前身として Berkeley API が存在します
Berkeley API は BSD UNIX に導入されたソケットモデルを採用した API です
細部では異なる部分もありますが、多くの点で WinSock は Berkeley と共通します
実際に Berkeley ソケット API のほとんどが
WinSock API と同じ関数名とパラメータを持っているのです
その証拠に、熟練した Win32 API プログラマは
WinSock の命名規則に、多くの違和感を覚えるはずです
WSA で始まる関数以外は、構造体や関数の命名規則が Microsoft のものではありませんし
FAR ポインタやネイティブな型を使っている点でも、Win32 と性質が異なります