那位高手帮忙看看我这段程序哪里还有问题,服务器上已经显示了"已监听到客户机",但是为什么客户机上却显示"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
我好困惑,他们不是分别在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
还是我来解决吧.以上代码是我设置的.服务端发送信息.都加一个前缀.而客户端接收信息后都要对前缀进行分类再进行处理,比如说:
前缀是"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
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连接成功
我的任务就是帮导师把局域网内的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