我在服务端用一个Winsock控件,用TCP协议打开了一个端口监听接收数据,客户端也用Winsock控件、TCP协议连接服务端打开的端口。
如果在VB的调试状态下运行,客户端跟服务端的通讯是正常的。但是如果编译exe文件(编译过程没提示出错)运行之后,客户端则不能连上服务端。
以前我做同样的事情都没有出现过这种情况的,请问这是什么原因呢?谢谢!
如果在VB的调试状态下运行,客户端跟服务端的通讯是正常的。但是如果编译exe文件(编译过程没提示出错)运行之后,客户端则不能连上服务端。
以前我做同样的事情都没有出现过这种情况的,请问这是什么原因呢?谢谢!
Public Sub InitWinSock()
Dim i As Long
Winsock1(0).Protocol = sckTCPProtocol '使用TCP协议
Winsock1(0).LocalPort = 1234 '与客户端的连接使用1234端口
Winsock1(0).Listen '开始监听
For i = 1 To 100 '设定最大连接为100
Load Winsock1(i)
Next
End SubPrivate Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Long
For i = 1 To 100
If Winsock1(i).State = sckClosed Then
Winsock1(i).Accept requestID
Exit For
End If
Next
End SubPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strClient As String Winsock1(Index).GetData strClient, vbString '获得数据
Debug.Print strClient
End SubPrivate Sub Winsock1_Close(Index As Integer)
Winsock1(Index).Close
End Sub
// 建议程序在winsock_close winsock_error中把错误打印出来,根据错误找连不上服务器端的原因,看是强制拒绝连接,还是连接超时 又或者是其他原因
InitWinSock
End SubPublic Sub InitWinSock()
Dim i As Long
Winsock1(0).Protocol = sckTCPProtocol '使用TCP协议
Winsock1(0).LocalPort = 1234 '与客户端的连接使用1234端口
Winsock1(0).Listen '开始监听
For i = 1 To 100 '设定最大连接为100
Load Winsock1(i)
Next
End SubPrivate Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Long
For i = 1 To 100
If Winsock1(i).State = sckClosed Then
Winsock1(i).Accept requestID
Exit For
End If
Next
End SubPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strClient As String Winsock1(Index).GetData strClient, vbString '获得数据
Debug.Print strClient
End SubPrivate Sub Winsock1_Close(Index As Integer)
Winsock1(Index).Close
End Sub编译生成EXE文件运行也正常。
Winsock1.RemoteHost = ServerIP
Winsock1.RemotePort = 1234
Winsock1.LocalPort = 0
Winsock1.Connect服务端在调试状态下运行则客户端一切正常,运行exe则客户端出现以下错误
Err.Number=40006
Err.Description=Wrong protocol or connection state for the requested transaction or request
真的是防火墙的问题,呵呵。