ネットワーク VB6
前へ 目次へ 次へ 

ネットワーク通信プログラム 2

 作成した「単語検索」プログラムは、クライアントがサーバに接続しても正しく接続されたかどうか、英単語を入力して日本語訳が表示されるまでわからない。
 ここでは、接続が完了したときに接続先のコンピュータ名が表示されるようにプログラムを追加する。


サーバの処理(追加)

  1.  クライアントのコンピュータ名を知る方法がないので、接続が完了したときにクライアントからコンピュータ名を送信させるようにする。ただし、クライアントからの送信データが英単語かコンピュータ名か、どちらかわからない(送信データはDataArrivalプロシージャでGetDataメソッドを使って受信する)ので、コンピュータ名の先頭には"##"を付けて送信することに決める(例えば、コンピュータ名がComputer2のとき ##Computer2 がクライアントから送信される)。
     
  2.  クライアントが終了したとき、次の接続要求が受け付けられるように処理を追加する。クライアントから接続が閉じられたときは、Closeプロシージャが呼び出される。このプロシージャで接続を閉じ(Closeメソッド)、あらためて接続要求を受け付ける(Listenメソッド)。


コントロールの追加

 図のようにラベルとテキストボックスをひとつずつ追加する。


 ラベル(Label1)
  Caption … 接続先、   Left … 120、   Top … 480、   AutoSize … True

 AutoSizeプロパティはサイズを表示内容(Captionプロパティに設定された文字列データ)の大きさに合わせて自動的に変更するかどうかを設定するものである。Ture=サイズを自動的に変更する、False=サイズを自動的に変更しない。

 テキストボックス(Text2)
  Text … なし、   Height … 270、   Left … 120、   Top … 240、   Width … 3255

・プログラムリスト (1. クライアント名の表示)

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim dat As String, ans As String
    Dim n As Integer

    Winsock1.GetData dat
    'クライアントのコンピュータ名受信
    If Left(dat, 2) = "##" Then    'コンピュータ名かどうか判定
        Text2.Text = Mid(dat, 3)    'コンピュータ名を表示
        Exit Sub        'プロシージャを抜け出す
    End If
    Text1.Text = dat
    For n = 0 To 20
        If dat = Word(0, n) Then
            Winsock1.SendData Word(1, n)
            Exit For
        End If
    Next n
    If n = 21 Then
        Winsock1.SendData "わかりません"
    End If
End Sub

 受信データdatの最初の2文字が##であればコンピュータ名であるから、Left関数で先頭(左端)から2文字を取り出して"##"と比較している。コンピュータ名であれば、それをText2に表示してからこのサブプロシージャから抜け出す(Exit Sub)。コンピュータ名は受信データの3文字目からであるのでMid関数で3文字目以降を取り出している。

・プログラムリスト (2. 切断時の接続要求の再受付)

Private Sub Winsock1_Close()
    Text2.Text = ""        'コンピュータ名を消す
    Winsock1.Close        '接続を閉じる
    Winsock1.Listen        '接続要求を受け付ける
End Sub

 クライアントから接続が閉じられたとき、Closeプロシージャが呼び出される。


クライアントの処理(追加)

 サーバのコンピュータ名はRemoteHostプロパティで参照できる(RemoteHostプロパティにサーバのコンピュータ名を設定している)。
 サーバとの接続が完了したとき、Connectプロシージャが呼び出されるので、このプロシージャにコンピュータ名を表示するプログラムを追加する。
 さらに、サーバのところで決めたようにクライアントのコンピュータ名(##を先頭に付けて)をサーバに送信するプログラムも追加する。


コントロールの追加

 図のようにラベルをひとつ追加する。

 ラベル(Label1)
  Caption … 接続先、   Left … 120、   Top … 2880、   AutoSize … True

・プログラムリスト

Private Sub Winsock1_Connect()
    'サーバのコンピュータ名を表示
    Label4.Caption = "接続先:" & Winsock1.RemoteHost
    'サーバにクライアントのコンピュータ名を送信
    Winsock1.SendData "##" & Winsock1.LocalHostName
End Sub


 RemoteHost(リモートコンピュータ)とLocalHost(ローカルコンピュータ)について

 使用するコンピュータから見た呼び方で、使用しているコンピュータをローカルコンピュータ、接続先をリモートコンピュータと呼ぶ。サーバがリモートでクライアントがローカル、またはその逆という意味ではない。


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system