VB:用Winsock控件数组作服务的实现过程范例

来源:互联网 发布:td lte网络架构 编辑:程序博客网 时间:2024/05/22 19:24
Visual Basic CodePrivate Type SockServerInfo
      Enabled As Boolean
End Type
Dim Server (   )   As SockServerInfo

Private Sub Form_Load (   )  
      CreateServer
End Sub


Private Sub Winsock1_ConnectionRequest (   _
                                                      Index As Integer, _
                                                      ByVal requestID As Long )  
      If Winsock1 ( Index ) .State <> 0 Then Winsock1 ( Index ) .Close
      Winsock1 ( Index ) .Accept requestID
      CreateServer
End Sub

Private Sub Winsock1_DataArrival ( Index As Integer, ByVal bytesTotal As Long )  
      Dim NetWorkString As String
      Winsock1 ( Index ) .GetData NetWorkString, vbString, bytesTotal
      Print "Index " & Index & " 收到数据:" & NetWorkString
      Winsock1 ( Index ) .SendData "转发回去的数据"
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 )  
      CancelDisplay   =   True
      Winsock1_Close Index
End Sub

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

Private Sub CreateServer (   )  
      Dim ServerMaxCount As Long
      Dim X As Long
      Dim IsHaveFalse As Long
      On Error Resume Next
      ServerMaxCount   =   UBound ( Server )  
      If Err.Number <> 0 Then
            ServerMaxCount   =   0
            ReDim Server ( ServerMaxCount )  
      Else
            IsHaveFalse   =   0
            For X   =   0 To ServerMaxCount
                  If Server ( X ) .Enabled   =   False Then
                        ServerMaxCount   =   X
                        IsHaveFalse   =   1
                        Exit For
                  End If
            Next X
            If IsHaveFalse   =   0 Then
                  ServerMaxCount   =   ServerMaxCount + 1
                  ReDim Preserve Server ( ServerMaxCount )  
            End If
            Load Winsock1 ( ServerMaxCount )  
      End If
      Winsock1 ( ServerMaxCount ) .LocalPort   =   60000
      Winsock1 ( ServerMaxCount ) .Listen
      Server ( ServerMaxCount ) .Enabled   =   True
End Sub

Private Sub StopServer ( Index As Integer )  
      Dim ServerMaxCount As Long
      If Winsock1 ( Index ) .State <> 0 Then Winsock1 ( Index ) .Close
      On Error Resume Next
      ServerMaxCount   =   UBound ( Server )  
      If Index   =   ServerMaxCount Then
            If Index   =   0 Then
                  Erase Server
            Else
                  Unload Winsock1 ( Index )  
                  ReDim Preserve Server ( ServerMaxCount - 1 )  
            End If
      Else
            Unload Winsock1 ( Index )  
            Server ( Index ) .Enabled   =   False
      End If
End Sub

其实概念很简单,主要是处理好控件数组的创建和释放就可以了
原创粉丝点击