vb winsock 聊天程序 server端程序

有一部分看不懂,不知道是什么意思
SERVER界面部分是一个FORM 上面只有一个WINSOCK控件,没其他的东西

程序代码如下:
Private Sub Form_Load()
ReDim blnArray(0)
'set Local Port
Winsock1(0).LocalPort = 10101 'This is the port the server listens on
'Listen
Winsock1(0).Listen
blnArray(0) = True
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
'Check if any free sockets
If Winsock1.Count <> 1 Then
For i = 1 To Winsock1.Count - 1
If blnArray(i) = False Then 'Checks if the socket at index "i" is available
Winsock1(i).Accept requestID 'Accepted connection to old but available socket
Exit Sub
End If
Next i
End If

'Only runs if no open sockets
'Increase size of blnArray
ReDim Preserve blnArray(Winsock1.UBound + 1)
'Load new Winsock1

Load Winsock1(Winsock1.UBound + 1)
'Accept Connection to newly created socket
Winsock1(Winsock1.UBound).Accept requestID
'Updates the Array at requested position to true stating socket is in use at theis index
blnArray(Winsock1.UBound) = True
'Do not worry your new Winsock1 control automatically is given an open port by the Windows OS
End Sub

Private Sub Winsock1_Close(Index As Integer)
SafeClose (Index)
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
Dim i As Integer
'get data from client
Winsock1(Index).GetData strData
'Send the data to all connected clients
If LCase(strData) = "/quit" Then
'Closes the connection at index of requested user
SafeClose (Index)
Else
For i = LBound(blnArray) To UBound(blnArray)
SafeSend i, strData
Next i
End If
End Sub

Private Sub Winsock1_Error(Index As Integer, 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)
'Closes the connection at the errored index
SafeClose (Index)
End Sub

Private Sub SafeSend(Index As Integer, ByVal strData As String)
If Winsock1(Index).State = sckConnected Then
Winsock1(Index).SendData strData
End If
End Sub

Private Sub SafeClose(Index As Integer)
If Winsock1(Index).State = sckConnected Then
blnArray(Index) = False
Winsock1(Index).Close
Unload Winsock1(Index)
End If
End Sub

本人看的似懂非懂,请高手最好能够详细解释一下这个程序,特别是
其中在Winsock1_ConnectionRequest 这个事件里面的部分
如果说明的够清楚的话,加50分,不吝啬!
首先我不知道 声明的 ReDim blnArray(0) 是代表什么意思
Winsock1.Count 查了半天网上也找不到到底代表啥?
找不到资料
If Winsock1.Count <> 1 Then
For i = 1 To Winsock1.Count - 1
If blnArray(i) = False Then 'Checks if the socket at index "i" is available
Winsock1(i).Accept requestID 'Accepted connection to old but available socket
这段最让我头痛,搞的我下面看不下去

首先,Winsock1_ConnectionRequest 事件:
这个事件是处理新连接请求的。
If Winsock1.Count <> 1 Then
'count显然是计数的意思,即:如果当前已经装载的socket数目不等于1
(初始状态有一个socket(即Winsock1(0))),就说明有2个以上的连接请求,因此需要装载新的socket来应答连接。
For i = 1 To Winsock1.Count - 1
If blnArray(i) = False Then
'blnArray这个数组只是个标记作用,用来标记Winsock1(i)是否可用,即是否已在接收连接。
Winsock1(i).Accept requestID

其次,ReDim:
ReDim是用来给动态数组分配实际大小的,我建议你去看看VB的MSDN,上面说的比较清楚。

最后,
整个代码的作用就是能连接多个客户端的服务端聊天室,相信你应该知道。如果你没看过只连接一个客户端的程序,建议你先看看那个,之后再结合MSDN来看这个。

其实我也是最近才开始学VB,说的可能不完全正确。
温馨提示:答案为网友推荐,仅供参考
相似回答