MS Visual Basic と Internet Controls
Copyright (c) 1996, by Hirofumi Fujii (藤井啓文)
LastUpdate: 03-Jun-1996
Visual Basic 4.0J に ActiveX の Internet Controls を
組み込んで、非常に短時間で、Internet のアプリケーション
プログラムを書くことが可能です。
実例として、daytime client と echo client を作る場合を
考察してみましょう。
Internet Control Pack を組み込むと、Visual Basic の
カスタムコントロールとして、Microsoft Winsock Controls
が選べるようになります。これを選ぶと、コントロールに
TCP と UDP が、付け加わります。
TCP による daytime 取得の手順は
- Remote host の daytime port に connect する
- Remote host から data (daytime 情報) を受け取る
- Remote host が connection を切る
- socket を close する
これを Microsoft WinSock Controls の TCP control を使用
する場合、上の手順は具体的には、次のようになります。
Connection の確立
TCP control を使用して Connection を確立する手続きは以下の通り
です。
- TCP control properties の RemoteHost と RemotePort を設定
- TCP control の Connect method を呼び出す
Connection が確立すると、
- TCP control の Connect event が発生し、
- object_Connect が呼び出されます。
これにより、connection の確立を知ることができます。
Data の取得
Remote Host から data が送られてくると、
- TCP control の DataArrival event が発生し、
- object_DataArrival が呼び出されます。
通常ユーザプログラムでは、ここで GetData method を
呼び出し、データを取得します。
注意すべきことは、GetData method にはデータ型の
指定があることです。
daytime の場合、文字列が送られてきますので、データ型と
しては vbString を指定します。また、受信バッファの
変数も、variant 型にしておくか、または String 型
にしておく必要があります。
Connection の切断
daytime では remote host から connection を切断します。
これが起こると、
- TCP control の Close event が発生し、
- object_Close が呼び出されます。
ここで、local 側では
Close method を呼び出して、connection を close します。
これだけの処理を行わせるプログラムを実際に書いてみたところ、
プログラミングに要した時間は 30分以下でした。
Visual Programming の威力と言えるでしょう。
では、次に、Echo client を作る場合を考察してみましょう。
この場合、次の二つのことが新たに加わります。
- Data を送る、
- local 側から connection を切る。
Data の送信
Data を送るには、SendData method を呼び出します。
これにより、
- object_SendProgress と
- object_SendComplete が
発生します。
筆者がテストしたベータ2では、Winsock controlの
目次の Events には SendComplete Event は出てませんでしたが、
SendProgress Evnet から see also を選ぶことにより、たどり
つくことができました。
Local 側からの connection の切断
Local 側から connection を切るには、object_Close
を呼び出しますが、これを呼び出した後、TCP control の LocalPort
property が元の値のまま残っていることに注意します(少なくとも
私がテストしたベータ2では)。
新たに、connection を張るために、システムに LocalPort の設定を
任せるためには、LocalPort を 0 に戻す必要があります。