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

チャット プログラムの作成2

サーバの処理

クライアントからの接続要求があったとき
クライアントとの接続の処理をする。
クライアントから送信されるコンピュータ名を表示する。
クライアントからデータを受信したとき
受信データを表示する。
送信データが入力されたとき
送信データをクライアントに送信する。
送信データを表示する。
クライアントが接続を閉じたとき
接続を閉じて、再度接続要求待ちにする。

・プログラムリスト

 初期設定・終了処理とクライアントからの接続要求があったときの処理

Option Explicit    '変数宣言の強制指定
Private Sub Form_Load()
    Winsock1.LocalPort = 1001    '接続要求受付ポート番号設定
    Winsock1.Listen    '接続要求待ち
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Winsock1.Close    'Winsockを閉じる
    Unload Me
    End
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    If Winsock1.State <> sckClosed Then    'Winsockの状態(閉じていない)
        Winsock1.Close    'Winsockを閉じる
    End If
    Winsock1.Accept requestID    '接続処理
End Sub

 Form_Loadプロシージャでは、接続要求受付ポート番号の設定と接続要求待ちの処理をしている。
 今回のプログラムは終了のボタンを用意していないので、終了するにはコントロールボタン の閉じるをクリックする。このとき、QueryUnloadプロシージャが呼び出されるので、ここへ終了の処理をプログラムする。
 クライアントからの接続要求があるとConnectionRequestプロシージャが呼び出される。ここで接続の処理をプログラムする。

 クライアントからデータが送信されたときの処理

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim dat As String

    Winsock1.GetData dat    'データ受信
    If Left(dat, 2) = "##" Then    'コンピュータ名かどうか判定
        txtRComp.Text = Mid(dat, 3)    'コンピュータ名を表示
    Else
        DisplayData dat    'データ表示
    End If
End Sub

Private Sub DisplayData(msg As String)
'送受信データの表示
    '入力データ表示
    txtDisplay.Text = txtDisplay.Text & msg & vbCrLf
    'カーソルを末尾へ移動
    txtDisplay.SelStart = Len(txtDisplay.Text)
End Sub

 データを受信するとDataArrivalプロシージャが呼び出される。ここでは、

 送信データが入力されたときの処理

Private Sub cmdSoushin_Click()
    'データ送信(コンピュータ名+入力データ)
    Winsock1.SendData Winsock1.LocalHostName & ">" & txtInData.Text
    DisplayData txtInData.Text    'データ表示
End Sub

Private Sub txtInData_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then    'リターンキー
        'データ送信(コンピュータ名+入力データ)
        Winsock1.SendData Winsock1.LocalHostName & ">" & txtInData.Text
        DisplayData txtInData.Text    'データ表示
    End If
End Sub


 クライアントが接続を閉じたときの処理

Private Sub Winsock1_Close()
    Winsock1.Close    'Winsockを閉じる
    Winsock1.Listen    '再度、接続要求待ち
End Sub

 

クライアントの処理

サーバ名を入力し、接続ボタンをクリックしたとき
サーバに接続を要求する。
サーバとの接続が完了したとき
サーバにコンピュータ名を送信する。(接続のための必須の処理ではない)
サーバからデータを受信したとき
受信データを表示する。
送信データが入力されたとき
送信データをサーバに送信する。
送信データを表示する。
サーバが接続を閉じたとき
接続を閉じて、接続先コンピュータ名を消す。

 終了処理とサーバ名を入力し、接続ボタンをクリックしたときの処理

Option Explicit
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Winsock1.Close    'Winsockを閉じる
    Unload Me
    End
End Sub
 
Private Sub cmdSetsuzoku_Click()
  Winsock1.Close    '接続を閉じる
  Winsock1.RemoteHost = txtRComp.Text    'サーバのコンピュータ名設定
  Winsock1.RemotePort = 1001    'ポート番号設定
  Winsock1.Connect    '接続する
End Sub


 サーバとの接続が完了したときの処理

Private Sub Winsock1_Connect()
    '接続完了後、サーバにクライアントのコンピュータ名を送信
    Winsock1.SendData "##" & Winsock1.LocalHostName
End Sub


 サーバからデータを受信したときの処理

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim dat As String

    Winsock1.GetData dat    'サーバからのデータ受信
    DisplayData dat    'データ表示
End Sub

Private Sub DisplayData(msg As String)
'送受信データの表示
    '入力データ表示
    txtDisplay.Text = txtDisplay.Text & msg & vbCrLf
    'カーソルを末尾へ移動
    txtDisplay.SelStart = Len(txtDisplay.Text)
End Sub


 送信データが入力されたときの処理

Private Sub cmdSoushin_Click()
    'データ送信(コンピュータ名+入力データ)
    Winsock1.SendData Winsock1.LocalHostName & ">" & txtInData.Text
    DisplayData txtInData.Text    'データ表示
End Sub
 
Private Sub txtInData_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then    'リターンキー
        'データ送信(コンピュータ名+入力データ)
        Winsock1.SendData Winsock1.LocalHostName & ">" & txtInData.Text
        DisplayData txtInData.Text    'データ表示
    End If
End Sub


 サーバが接続を閉じたときの処理

Private Sub Winsock1_Close()
    Winsock1.Close        'Winsockを閉じる
    txtRComp.Text = ""    '接続先コンピュータ名を消去
End Sub


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

 

 

inserted by FC2 system