我用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
uj5u.com熱心網友回復:
我也不懂,幫忙頂一下,讓高手看到uj5u.com熱心網友回復:
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來連接呢
uj5u.com熱心網友回復:
,拷代碼時寫錯了,服務器端應該是5500,我是客戶端和復位端都在不同的局域網里,2個ip都做埠映射了。就是連不上。
uj5u.com熱心網友回復:
為什么不用VPN設備?那不更快連接嗎,或者用異速聯uj5u.com熱心網友回復:
本機地址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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122900.html
標籤:網絡編程
