那位高手帮忙看看我这段程序哪里还有问题,服务器上已经显示了"已监听到客户机",但是为什么客户机上却显示"F连接成功"了呢???
我好困惑,他们不是分别在IF和else语句中吗?怎么同时执行了呢?
Private Sub Winsockserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
   If Index = 0 Then
   Dim cIndex As Long
   Winsockserver(0).Close
   Winsockserver(0).Accept requestID
   view.Text = view.Text & "已监听到客户机" & Chr(13) & Chr(10)
   cIndex = 6000 + GetIndex
   Winsockserver(0).SendData "B" & cIndex '发送空闲端口过去让客户端重新连接
   isWinCount(cIndex - 6000) = False
   Winsockserver(cIndex - 6000).LocalPort = cIndex
   Winsockserver(cIndex - 6000).Listen
Else
   Winsockserver(Index).Close
   Winsockserver(Index).Accept requestID
   Winsockserver(Index).SendData "F连接成功"
End If
End Sub

解决方案 »

  1.   

    晕.
    还是我来解决吧.以上代码是我设置的.服务端发送信息.都加一个前缀.而客户端接收信息后都要对前缀进行分类再进行处理,比如说:
    前缀是"B" 表示服务端发送的是空闲端口.
    前缀是"F" 表示服务端发送的是系统信息
    前缀是"C" 表示服务端发送的是聊天信息.
    ......
    你也可以自己去设定.对于客户端都要对收到的信息进行分类.
    看以下代码:dim StrData as stringWinsock1.GetData strdataselect case mid(strData,1,1) '判断第一个字符进行分类
      case "B"   '第一个字符是"B"  Case "F"   '第一个字符是"F"  case "C"   '第一个字符是"C"  ....end select
      

  2.   

    Private Sub Winsockserver_ConnectionRequest(Index As Integer, ByVal requestID As Long) 
      If Index = 0 Then 
      Dim cIndex As Long 
      Winsockserver(0).Close 
      Winsockserver(0).Accept requestID 
      view.Text = view.Text & "已监听到客户机" & Chr(13) & Chr(10) 
      cIndex = 6000 + GetIndex 
      Winsockserver(0).SendData "B" & cIndex '发送空闲端口过去让客户端重新连接 
      isWinCount(cIndex - 6000) = False 
      Winsockserver(cIndex - 6000).LocalPort = cIndex 
      Winsockserver(cIndex - 6000).Listen 
    Else 
      Winsockserver(Index).Close 
      Winsockserver(Index).Accept requestID 
      Winsockserver(Index).SendData "F连接成功" 
    End If 
    End Sub
    1.代码比较乱,如果要实现一个服务器端连接多个客户端,那么应该把index单独拿出来,看你的代码似乎侦听的winsock一直会变
    2.如果你有多个客户端连接,那么必然有index大于0的客户端连接,所以会发送F连接成功
      

  3.   

    我是在帮导师做个项目,以前没接触过这些东西,所以弄得笨手笨脚的,见笑了。
    我的任务就是帮导师把局域网内的8路数据采集进来(共用一个IP ),所以我用了一个Winsock数组不断的监听客户端的信息,但是现在我客户端那边又出问题了,第一次connect 还可以,第二次connect 就不行,如果是再重新运行一次也可以,不知道又在哪里出问题了。
    Private Sub Command2_Click()----客户端程序
    Winsock.Connect
    End SubPrivate Sub Form_Load()
    Textsend.Visible = False
    Textget.Visible = False
    Winsock.RemotePort = 4000
    Winsock.RemoteHost = Text1.Text
    End SubPrivate Sub Textsend_Change()
    Winsock.SendData Textsend.Text
    End SubPrivate Sub Winsock_Close()
    Winsock.Close
    EndEnd SubPrivate Sub Winsock_Connect()
    Textsend.Visible = True
    Textget.Visible = True
    End SubPrivate Sub Winsock_DataArrival(ByVal bytesTotal As Long)
    Dim tmpstr As String
    Winsock.GetData tmpstr
    Textget.Text = tmpstr
     End Sub