我用TCP协议编写了一个服务端和一个客户端,但每次客户端和服务端建立联系后,第二次再使用客户端连接服务器时就无法连接,需重新启动服务端后才能够重新连接,请教高手解决,代码如下:
客户端
Private Sub Command1_Click()
Winsock1.Connect
End Sub
Private Sub Command2_Click()
Winsock1.Close
End
End SubPrivate Sub Command3_Click()
Text3.Text = "t1"
Winsock1.SendData Text3.Text
Text3.Text = ""
End SubPrivate Sub Command5_Click()
Text4.Text = "t4"
Winsock1.SendData Text4.Text
Text4.Text = ""
End SubPrivate Sub Form_Load()
Winsock1.RemotePort = 10010
Winsock1.RemoteHost = "192.168.255.194"
End SubPrivate Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End SubPrivate Sub Text1_Change()
Winsock1.RemoteHost = Text1.Text
End SubPrivate Sub Winsock1_Close()
Winsock1.Close
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim js As String
Winsock1.GetData js, vbString
Text2.Text = js
End SubPrivate Sub Text2_Change()
Select Case Text2.Text
Case "h1"
Shape1.BackColor = &HFF&
Text2.Text = ""
Case "t1"
Shape2.BackColor = &HFF&
Text2.Text = ""
Case "t2"
Shape3.BackColor = &HFF&
Text2.Text = ""
End Select
End Sub服务端
Private Sub Command1_Click()
Winsock1.SendData Text1.Text
End SubPrivate Sub Command2_Click()
Text2.Text = ""
End SubPrivate Sub Form_Load()
Text1.Visible = False
Text2.Visible = False
Winsock1.LocalPort = 10010
Winsock1.Listen
End SubPrivate Sub Winsock1_Close()
Winsock1.Close
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Text1.Visible = True
Text2.Visible = True
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim js As String
Winsock1.GetData js, vbString
Text2.Text = js
End SubPrivate Sub Text2_Change()
If Len(Text2.Text) = 2 Then
Select Case Text2.Text
Case "h1"
Shape1.BackColor = &HFF&
Case "t1"
Shape2.BackColor = &HFF&
Case "t2"
Shape3.BackColor = &HFF&
Case "t3"
Shape1.BackColor = &HFF00&
Case "t4"
Shape2.BackColor = &HFF00&
Case "a8"
Shape4.BackColor = &HFF&
Case "a0"
Shape4.BackColor = &HFF00&
End Select
Text2.Text = ""
End If
End Sub
客户端
Private Sub Command1_Click()
Winsock1.Connect
End Sub
Private Sub Command2_Click()
Winsock1.Close
End
End SubPrivate Sub Command3_Click()
Text3.Text = "t1"
Winsock1.SendData Text3.Text
Text3.Text = ""
End SubPrivate Sub Command5_Click()
Text4.Text = "t4"
Winsock1.SendData Text4.Text
Text4.Text = ""
End SubPrivate Sub Form_Load()
Winsock1.RemotePort = 10010
Winsock1.RemoteHost = "192.168.255.194"
End SubPrivate Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End SubPrivate Sub Text1_Change()
Winsock1.RemoteHost = Text1.Text
End SubPrivate Sub Winsock1_Close()
Winsock1.Close
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim js As String
Winsock1.GetData js, vbString
Text2.Text = js
End SubPrivate Sub Text2_Change()
Select Case Text2.Text
Case "h1"
Shape1.BackColor = &HFF&
Text2.Text = ""
Case "t1"
Shape2.BackColor = &HFF&
Text2.Text = ""
Case "t2"
Shape3.BackColor = &HFF&
Text2.Text = ""
End Select
End Sub服务端
Private Sub Command1_Click()
Winsock1.SendData Text1.Text
End SubPrivate Sub Command2_Click()
Text2.Text = ""
End SubPrivate Sub Form_Load()
Text1.Visible = False
Text2.Visible = False
Winsock1.LocalPort = 10010
Winsock1.Listen
End SubPrivate Sub Winsock1_Close()
Winsock1.Close
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Text1.Visible = True
Text2.Visible = True
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim js As String
Winsock1.GetData js, vbString
Text2.Text = js
End SubPrivate Sub Text2_Change()
If Len(Text2.Text) = 2 Then
Select Case Text2.Text
Case "h1"
Shape1.BackColor = &HFF&
Case "t1"
Shape2.BackColor = &HFF&
Case "t2"
Shape3.BackColor = &HFF&
Case "t3"
Shape1.BackColor = &HFF00&
Case "t4"
Shape2.BackColor = &HFF00&
Case "a8"
Shape4.BackColor = &HFF&
Case "a0"
Shape4.BackColor = &HFF00&
End Select
Text2.Text = ""
End If
End Sub
否则你将唯一一个做通讯去了,以后的连接请求就侦听不到了。
Me.wskListen.Bind 9999, "127.0.0.1"
Me.wskListen.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
For i = 0 To Me.wskServer.UBound
wskServer(i).Close
Next
wskListen.Close
End SubPrivate Sub wskListen_ConnectionRequest(ByVal requestID As Long)
For i = 0 To Me.wskServer.UBound
If Me.wskServer(i).State = sckClosed Then
Me.wskServer(i).Accept requestID
MsgBox i
Exit Sub
End If
Next
Load wskServer(i)
wskServer(i).Accept requestID
MsgBox i
End SubPrivate Sub wskServer_Close(Index As Integer)
wskServer(Index).Close
End SubPrivate Sub wskServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'处理数据接收
End Sub
Me.wskListen.Bind 9999, "127.0.0.1"
Me.wskListen.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
For i = Me.wskServer.UBound To 1 Step -1
wskServer(i).Close
Unload wskServer(i)
Next
wskServer(0).Close
wskListen.Close
End SubPrivate Sub wskListen_ConnectionRequest(ByVal requestID As Long)
For i = 0 To Me.wskServer.UBound
If Me.wskServer(i).State = sckClosed Then
Me.wskServer(i).Accept requestID
Exit Sub
End If
Next
Load wskServer(i)
wskServer(i).Accept requestID
End SubPrivate Sub wskServer_Close(Index As Integer)
wskServer(Index).Close
End SubPrivate Sub wskServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'处理数据接收
End Sub
这个数组没有值,找不到方法数据!~~~~~