す! せま 見 ド 全部 メソッ る 繋が ダイアモンドアプリコット電話研究所 11回 山崎 はるか 第 YAMAZAKI, Haruka http://www.nda.co.jp/ Socketクラス .NET Frameworkを 使 っ た ネ ッ ト ワークプログラミング(すなわちマ Socketクラス ∼パケットモニターの作り方 ネージド)において、アプリケーショ 2) 。gethostbyaddressなどの名前解決 ンが、どこまでシステムに接近/深堀 はDnsクラス、データ構造体はIPHost りできるだろうか。その最深部こそが EntryやIPEndPointに引き継がれるな Socketクラスである(図1) 。 ど、役割ごとに再編成されている(わ Socketクラスは、WinSock(コラム 参照)の主要部分を.NET Framework Level 1 から使えるようにしたクラスである。 2 3 4 5 Technology Tools Visual Basic Visual C# Visual C++ SQL Server Oracle Access .NET Frameworkにおいて、Socket かりやすくなった) 。 かつてVC++、VBのDeclareで Win Sock APIを直接コールすることが常識 だった時期もある。しかし各種コント クラスは、connectなど WinSockの通 ロールプログラミングの時代をはさみ、 信関数部分を受け持っている(表1・ いまやネットワークプログラミングの WinSockってなに? WinSockとは、WindowsでTCP/IPアプ リケーションを作るための API セットであ り、UNIXのSocketライブラリをベースに 複数のベンダー(メーカー)が 参加して定め たものである。 当初は TCP/IP 用であったが、現在の WinSock 2.xはIPXなど他のプロトコルも使 えるようになった。 Windows 95では、標準でWinSock 1.1 が 実装され、後付けDLLでWinSock 2.xを 提供。Windows 98 以降では標準で Win Sock 2.2が実装されている。 ASP.NET Other: Visual Studio .NET 2003 Samples この記事で取り上げたソースコードおよび サンプルプログラムは、 http://www.shoeisha.com/mag/windev/ からダウンロード可能です。 112 Windows Developer Magazine WinSock 2.2ってなに? WinSockは1.0も2.0も「仕様」のことで おいても「WinSock」は仕様名で、それを あり、実際にDLLとしてリリースされている 「Winsock」と書くときはWindowsのAPI バージョンはそれぞれ1.1や2.2である。な 名/コントロール名を指す……といったわけ ので「APIリファレンス」などのように“仕 のわからない風習/混乱もあったりする。 様”を書いたものは「WinSock 2.0解説」 しかし、ありがたいことに、.NET Frame となるが、関数や API の適用バージョンは workになってから「SocketはSocketクラ 1.1や2.2必須などと書いてあったりする。 ス」と定まった。このおかげで、いまは余分 この時点でもややこしいのだが、用語面に なことまで覚えなくて済んでいる。 Socketクラス∼パケットモニターの作り方 図1:.NET Frameworkの範囲 HttpWeb Request クラス FileWeb Response クラス FileWeb Request クラス HttpWeb Response クラス WebClient クラス Web Request クラス IPEnd Point System.Net IPHost Entry Dns クラス TcpClientクラス TcpListenerクラス UdpClientクラス .NET Framework System.Net.Sockets Socketクラス WinSock2.0(∼2.2) アンマネージド (OS深部) Tranceport Device Layer RSVP Afd.dll Traffic.dll デバイスドライバ Tcpip.sys VS6.0 C/C++ Msgcp.sys Ndis.sys イーサネット カード 主流は「Socketクラス」以上の上位構 Pingクライアントや Tracerouteクライ 主役クラスでないとはいっても、重 造にほぼシフトしたといえる。 アントのようにICMPなど「他のプロト 要な存在であることに代わりはないの コルを用いる場合」などがそれである。 である。 さらにいうなら、TcpClientクラス、 TcpListnerクラスの存在により、Soc また、Raw(ナマ)パケットをまるご ket クラスすらも、主役にはあらず、 と監視/表示する「パケットモニター もっぱらC++/UNIXプログラマのため の構築」には、IOControlメソッドが不 の一時的な代替クラスとして用いられ 可欠である。 ているというのが現実である。この時 ほかにも、特別な非同期接続 ―― 代、ソケットを操作できるからといっ UdpClientクラスのように、現状ではタ て、それが偉いというわけではない。 イムアウトが指定できないメソッドを、 しかし、Socketクラスを用いないと 実装で きないものが ある。たとえば 速習! Socketクラス実践 Socketクラスで TCPクライアントを 作ってみよう。 各局面で用いるメソッドは、図2の 代替したいときなど ―― にもSocketク とおり (UDPの場合は図3) 。ぱっと見で ラスは活躍する。 は、TcpClientクラスによく似ているが、 2006 March 113
© Copyright 2026 Paperzz