下面是我的程序:
服务端:
Private bConnected As Boolean
Private Sub ClientSock_Connect()
    bConnected = True
End SubPrivate Sub Form_Load()
    ServerSock.LocalPort = 1505
    If ServerSock.State <> sckClosed Then
        ServerSock.Close
    End If
    
    ServerSock.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
    If ServerSock.State <> sckConnected Then
        ServerSock.Close
   End If
    
'    ClientSock.Close
End SubPrivate Sub ServerSock_ConnectionRequest(ByVal requestID As Long)
    If ServerSock.State <> sckClosed Then _
        ServerSock.Close
    ServerSock.Accept requestID
End SubPrivate Sub ServerSock_DataArrival(ByVal bytesTotal As Long)
   Dim strData As String
   ServerSock.GetData strData
   Text1.Text = strData
End Sub客户端:
   Private bConnected As BooleanPrivate Sub ClientSock_Connect()
    bConnected = True
End SubPrivate Sub Command1_Click()
    ClientSock.Connect
End SubPrivate Sub Command2_Click()
        
        
    Do Until bConnected
          DoEvents
          If ClientSock.State <> sckClosed Then
          End If    Loop
    
    ClientSock.SendData Text1.Text
    
End SubPrivate Sub Form_Load()
    ClientSock.RemoteHost = "10.1.1.253"
    ClientSock.RemotePort = 1505
End SubPrivate Sub Form_Unload(Cancel As Integer)
   If ClientSock.State <> sckConnected Then
        ClientSock.Close
   End If
End Sub

解决方案 »

  1.   

    ServerSock的Close事件和Error事件中应该重新Listen!如下:
    ServerSock.Close
    ServerSock.Listen
      

  2.   

    我在ServerSock的Close事件中加Listen后,为什么运行错误?
    例如
    Private Sub ServerSock_Close()
      ServerSock.Listen
    End Sub
      

  3.   

    在关闭完成之后,再进行Listen
      

  4.   

    该事件应该这样处理
    创建模块级的socket数组或单个变量(如果多个客户端需要数组,一对一则一个变量就行)
    dim m_objSocket as WinSocket
    Private Sub ServerSock_ConnectionRequest(ByVal requestID As Long)
        if m_objsocket is nothing then
           set m_objsocket=new winsocket
        endif
        m_objsocket.close
        m_objsocket.Accept requestID
    End Sub这样的好处是用一个socket专门listen,连接握手时用别的socket对象和客户端连接而listen的socket继续工作。如果先停客户端就可以继续连上服务器了。:)