服务器端:
Option Explicit
Private intmax As Long
Private Sub Form_Load()
intmax = 0
Winsock1(intmax).LocalPort = 1665
Winsock1(intmax).Listen
End Sub
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
        Dim i As Integer
        Dim temp As Integer
        temp = 0
        For i = 1 To intmax
            If Winsock1(i).State = 0 Then
                temp = i
                Exit For
            End If
        Next
        If temp = 0 Then
            intmax = intmax + 1
            temp = intmax
        Load Winsock1(temp)        Winsock1(temp).LocalPort = 0        Winsock1(temp).Accept requestID
        End If
        End If
End Sub
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim mydata As String
Winsock1(Index).GetData mydata, vbString
List1.AddItem "From Socket" + Str(Index) + "  " + mydata
Winsock1(Index).SendData "WinSock" + Str(Index) + "Reply"
If mydata = "Close" Then
   Winsock1(Index).Close
End If
客户端:
Option Explicit
Private Sub Command1_Click()
On Error GoTo myError1
Winsock2.LocalPort = 0  '以便自动产生Local Port
Winsock2.Connect "192.168.1.19"  '设定改成您 Server 电脑的IP 号码
myError1:
End Sub
Private Sub Command2_Click()
On Error GoTo myError2
Winsock2.SendData "Close"   '通知Server端Close
DoEvents
Winsock2.Close
myError2:
End Sub
Private Sub Command3_Click()
If Winsock2.State <> sckConnected Then
MsgBox "请连接"
Else
Winsock2.SendData "请求校时"
End If
End Sub
Private Sub Form_Load()
Winsock2.RemotePort = 1665  '设定与Server端做Listen的Port相同
Command1.Caption = "连接"
Command2.Caption = "断开"
Command3.Caption = "发送请求"
List1.Clear
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Winsock2.State <> sckClosed Then
   Winsock2.SendData "Close"
   DoEvents
   Winsock2.Close
   Winsock2.LocalPort = 0
   End If
End Sub
Private Sub Winsock2_Connect()
If Winsock2.State = sckConnected Then
 List1.AddItem "Connected! LocalPort =" + Str(Winsock2.LocalPort) + " RemptePort = " + Str(Winsock2.RemotePort)
End If
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
 Dim mydata As String
 Winsock2.GetData mydata, vbString
 List1.AddItem mydata
End Sub
Private Sub Winsock2_Error(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)
 List1.AddItem Description
End Sub
第一次连接成功 能发送请求 关闭连接后再连接 没反应 不能发请求

解决方案 »

  1.   

    没有看到你server端的代码,可能是你关闭了客户端的连接,但是没有在服务器端关闭连接,导致再次连接服务端的时候因为连接没有关闭使得服务端没有响应。
      

  2.   

    是用unload吗?关闭服务器端的连接 怎样关闭
      

  3.   

    我在服务器端有这样的代码 “ Winsock1(Index).Close”关闭了啊
    Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Dim mydata As String
    Winsock1(Index).GetData mydata, vbString
    List1.AddItem "From Socket" + Str(Index) + "  " + mydata
    Winsock1(Index).SendData "WinSock" + Str(Index) + "Reply"
    If mydata = "Close" Then
       Winsock1(Index).Close
    End If
    End Sub
      

  4.   

    你是在服务器端关闭连接的,那么在客户端的winsock控件的close事件中就需要增加一个winsock.close方法来将客户端的连接也关闭。
      

  5.   

    还是不行啊 发送不了数据 当我再次连接的时候,print winsock2.state 显示的是8(同级人员正在关闭)我不懂这是什么意思 帮忙仔细看看我的程序啊