VB6.0,如何用winsock的2个内网通过外网通讯

chenwin2006 2014-01-23 10:27:43
我用vb6.0编的软件,因为公司要求:公司本部一台电脑做服务器,中国其他城市的设备做客户端,然后只要设备打开软件,公司本部电脑就可以看到客户端的一些监控数据了。这个就是2个局域网内的PC,通用外网通讯。现在做实验,2个局域网都进行了端口映射,然后客户端连接服务器,就是先winsock。state=6,连接中,过一会就9,通讯错误了。网上找了半天,没有样例啊。在同一个局域网可以用,连外网就不行啊!请高手帮忙啊!下面是程序:
客户端:
Private Sub cmdConnect_Click()
tcpClient.Connect

End Sub

Private Sub Form_Load()
tcpClient.RemoteHost = "xxx.xxx.x.xx" 服务器PC用ip138查的外网ip地址
tcpClient.RemotePort = 5500 服务器PC路由器设定的端口映射
tcpClient.LocalPort = 5600 客户端PC路由器设定的端口映射
End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData
texOutput.Text = strData
End Sub

Private Sub Timer1_Timer()
texOutput.Text = tcpClient.State
If tcpClient.State = sckError Then MsgBox ("通信错误")
End Sub

Private Sub txtSend_Change()
tcpClient.SendData txtSendData.Text
End Sub

Private Sub wskClient_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)

If Number = 10061 Then
MsgBox "请检查服务器端是否打开", vbInformation, "Error"
End If

End Sub

服务器端:

Private Sub Form_Load()
tcpServer.LocalPort = 5600
tcpServer.Listen
End Sub

Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
If tcpServer.State <> sckClosed Then tcpServer.Close
tcpServer.Accept requestID
End Sub

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
tcpServer.GetData strData
txtOutput = strData
End Sub

Private Sub textSendData_Change()
tcpServer.SendData textSendData.Text
End Sub
...全文
709 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
王二.麻子 2014-05-08
  • 打赏
  • 举报
回复
本机地址192.168.127.100, 路由器地址:192.168.127.1 路由器外网地址:192.168.1.147 路由器设置:60000端口映射到192.168.127.100 在本机做服务器,也做客户机。 客户winsock开始连接192.168.127.1死活不行,后来想想应该用路由器的外网地址,连接192.168.1.147,正常,同学也正常。

Option Explicit

Private Sub Command1_Click()
Winsock3.Connect "192.168.1.147", 60000
End Sub

Private Sub Command2_Click()
Winsock2.SendData StrConv("123", vbUnicode)
End Sub

Private Sub Form_Load()
Server.LocalPort = 60000
Server.Listen
End Sub

Private Sub Server_ConnectionRequest(ByVal requestID As Long)
Debug.Print "Server connection Request"
Winsock2.Accept requestID
Winsock2.SendData StrConv("Server Connect OK.", vbUnicode)
End Sub

Private Sub Server_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)
Debug.Print "serverListen", Number, Description
End Sub

Private Sub Timer1_Timer()
Label1.Caption = Server.State & " " & Winsock2.State & " " & Winsock3.State
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)
Debug.Print "server", Number, Description
End Sub

Private Sub Winsock3_DataArrival(ByVal bytesTotal As Long)
Dim a
Winsock3.GetData a
Debug.Print a
End Sub

Private Sub Winsock3_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)
Debug.Print "Client", Number, Description
End Sub
zengfanying 2014-03-24
  • 打赏
  • 举报
回复
为什么不用VPN设备?那不更快连接吗,或者用异速联
chenwin2006 2014-01-24
  • 打赏
  • 举报
回复
,拷代码时写错了,服务器端应该是5500,我是客户端和复位端都在不同的局域网里,2个ip都做端口映射了。就是连不上。
taoguangye 2014-01-23
  • 打赏
  • 举报
回复
Private Sub Form_Load() tcpClient.RemoteHost = "xxx.xxx.x.xx" 服务器PC用ip138查的外网ip地址 tcpClient.RemotePort = 5500 服务器PC路由器设定的端口映射 tcpClient.LocalPort = 5600 客户端PC路由器设定的端口映射 End Sub 服务器不是用5600端口吗,客户端怎么会用5500来连接呢
figoba 2014-01-23
  • 打赏
  • 举报
回复
我也不懂,帮忙顶一下,让高手看到

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧