2012年4月5日 星期四

101/4/5


伺服端


伺服端畫面
伺服Winsock1(0)
伺服Winsock1(1)

伺服Winsock1(2)


程式碼

Option Explicit

Private Sub cmdSend_Click()
 
  Dim i As Long
  For i = 1 To 2
    Winsock1(i).SendData txtSend.Text
  Next
 
End Sub

Private Sub Form_Load()
  Winsock1(0).LocalPort = 7777
  Winsock1(0).Listen  'Winsock1(0)負責監聽 Clien1=Winsock1(1)  Clien2=Winsock1(2)
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

    Dim i As Long
    For i = 1 To 2
    If Winsock1(i).State = sckClosed Then
    Winsock1(i).Accept requestID
    List1.AddItem "Local Port=" + Str(Winsock1(i).LocalPort) + " RemotePort = " + Str(Winsock1(i).RemotePort)
    Exit For
    End If
    Next
 
  cmdSend.Enabled = True
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
 
  Dim strData As String
  Winsock1(Index).GetData strData, vbString
  txtReceived.Text = strData
 
  If Index = 1 Then
   Winsock1(2).SendData txtReceived.Text    '接收到來至Clien1的資料送到Clien2
  Else
   Winsock1(1).SendData txtReceived.Text    '接收到來至Clien2的資料送到Clien1
  End If
   
  If strData = "close" Then
    Winsock1(Index).Close
    cmdSend.Enabled = False
    Winsock1(0).Listen
  End If
 
End Sub

Clien端
Clien畫面

ClienWinsock1(1)

ClienWinsock1(2)

程式碼
Private Sub cmdConnect_Click()
  Winsock1.LocalPort = 0   '以便自動產生Local Port
  Winsock1.Connect "192.168.15.46"  '設定改成您 Server 電腦的IP 號碼
End Sub

Private Sub cmdExit_Click()
  Winsock1.SendData "close"
  DoEvents
  Winsock1.Close
  Winsock1.LocalPort = 0
End Sub

Private Sub cmdSend_Click()
  Winsock1.SendData txtOutput.Text
  DoEvents
End Sub

Private Sub Form_Load()
  Winsock1.RemotePort = 7777  '設定與Server端做Listen的Port相同
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Winsock1.State <> sckClosed Then
   cmdExit_Click
End If
End Sub

Private Sub Winsock1_Connect()
If Winsock1.State = sckConnected Then
   lstInput.AddItem "Connected! LocalPort =" & Winsock1.LocalPort _
                    & " RemptePort = " & Winsock1.RemotePort
End If

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim mydata As String
  Winsock1.GetData mydata, vbString
  lstInput.AddItem mydata
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  lstInput.AddItem Description
End Sub