Private Sub Command1_Click()
If Winsock1.State = sckConnected Then Winsock1.SendData Text1.Text
End SubPrivate Sub Command2_Click()
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Bind
Winsock1.Listen
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.Accept requestIDEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As StringWinsock1.GetData strData, vbStringText2.Text = Text2.Text + Chr(13) + Chr(10) + strDataEnd Sub
Private Sub Command0_Click()
If Winsock1.State = sckConnected Then Winsock1.SendData Text1.Text
End SubPrivate Sub Command1_Click()
If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.ConnectCommand1.Enabled = FalseCommand2.Enabled = True
End SubPrivate Sub Command2_Click()
Command1.Enabled = TrueCommand2.Enabled = FalseWinsock1.CloseEnd Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim str As StringWinsock1.GetData str, vbStringText2.Text = Text2.Text + Chr(13) + Chr(10) + strEnd SubPrivate Sub Winsock1_Connect()MsgBox "连接成功!"End Sub上面那段是服务端的代码!下面是客户端的!
要是有两个客户端的话为什么只能连上一个啊?另外一个连不上的?

解决方案 »

  1.   


    '服务器端. 增加一个Winsock1 index=0Private isWinCount(100) As Boolean  '设置服务器只能进行100个客户端确认
    Private Sub Form_Load()
      For i = 1 To 100
        Load Winsock1(i)
        isWinCount(i) = True   '设置为空闲
      Next
      
      Winsock1(0).LocalPort = "4000"
      Winsock1(0).Listen
    End SubPrivate Sub Winsock1_Close(Index As Integer)
      If Index <> 0 Then
         isWinCount(Index) = True
      Else
         Winsock1(0).Close
         Winsock1(0).Listen
      End If
      
    End SubPrivate Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    If Index = 0 Then
       Dim cIndex As Long
       Winsock1(0).Close
       Winsock1(0).Accept requestID
       cIndex = 6000 + GetIndex
       Winsock1(0).SendData "B" & cIndex '发送空闲端口过去让客户端重新连接
       isWinCount(cIndex - 6000) = False
       Winsock1(cIndex - 6000).LocalPort = cIndex
       Winsock1(cIndex - 6000).Listen
    Else
       Winsock1(Index).Close
       Winsock1(Index).Accept requestID
       Winsock1(Index).SendData "F连接成功"
    End If
    End Sub
    Private Function GetIndex() As Long      '此方法是取得服务器空闲端口
      For i = 1 To 100
         If isWinCount(i) = True Then
            GetIndex = i
            Exit Function
         End If
      Next
    End FunctionPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
       Dim strData As String
       
       Winsock1(Index).GetData strData
       For i = 1 To 100
          If Not isWinCount(i) Then
             Winsock1(i).SendData "D" & strData
          End If
       Next
       
    End Sub
    '窗户端  请增加一个文本框. 设置为多行文本, Name=OutTxt
    '再增加一个文本框  Name= SendTxt
    '再增加一个Winsock1Private Sub Form_Load()
      Winsock1.Connect Winsock1.LocalIP, 4000  '因为在一台机器上调试,所以 用到了 Winsock1.localIP.如果在不同机器上,此处用服务器的IP地址。而4000,为服务器打开的端口。可以自己设定
    End SubPrivate Sub SendTxt_KeyPress(KeyAscii As Integer)
       If KeyAscii = 13 Then
           Winsock1.SendData SendTxt.Text
           SendTxt.Text = ""
       End If
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
      Dim strData As String
      Winsock1.GetData strData
      Select Case Mid(strData, 1, 1)
        Case "B"
           Winsock1.Close
           Winsock1.Connect Winsock1.LocalIP, Mid(strData, 2) '用重新取得的端口进行连接
        Case "F"
           OutTxt.Text = OutTxt.Text & Chr(13) & Chr(10) & "系统信息:" & Mid(strData, 2)
        Case Else
         
          OutTxt.Text = OutTxt.Text & Chr(13) & Chr(10) & Mid(strData, 2)  End Select
    End Sub
    '你的问题点出在了服务器端只有一个Winsock.一个Winscok只能建立一个连接.如果要有多个连接就要有多个Winsock