在vb6中通过代理将客户端请求转发到另一台服务器
我有两个vb6应用程序,一个是客户端应用程序,另一个是服务器应用程序,都使用winsock控件进行通信我想要的是: 我需要做或尝试的是使服务器的应用程序自动“端口转发”从客户端到另一台服务器的传入连接 例如: 客户端的IP为0.0.0.0 我的IP是1.1.1.1 程序的IP为2.2.2.2 客户端和程序之间的正常程序连接是客户端将正常连接到程序,程序读取客户端的IP为0.0.0.0 使用此Serverapp,当客户端(0.0.0.0)连接到我的IP(1.1.1.1)时,我的IP(服务器应用)将接受来自客户端的连接,并将客户端连接到程序IP(2.2.2.2)。所以当程序读取客户端IP时,它将读取为1.1.1.1 那么如何实现这一点,请发布一个示例代码在vb6中通过代理将客户端请求转发到另一台服务器,vb6,Vb6,我有两个vb6应用程序,一个是客户端应用程序,另一个是服务器应用程序,都使用winsock控件进行通信我想要的是: 我需要做或尝试的是使服务器的应用程序自动“端口转发”从客户端到另一台服务器的传入连接 例如: 客户端的IP为0.0.0.0 我的IP是1.1.1.1 程序的IP为2.2.2.2 客户端和程序之间的正常程序连接是客户端将正常连接到程序,程序读取客户端的IP为0.0.0.0 使用此Serverapp,当客户端(0.0.0.0)连接到我的IP(1.1.1.1)时,我的IP(服务器应用)将
我尝试在服务器应用程序上再添加一个winsock控件&连接到实际服务器,但如何通过服务器应用程序将客户端请求转发到实际服务器!请附上示例代码。我们将不胜感激。很抱歉回复太晚 一个非常简单明了的解决方案可以是: 一个简单的服务器项目:
'1 form with:
' 1 winsock control: name=Winsock1
' 1 textbox control: name=Text1 multiline=true scrollbars=3
Option Explicit
Private Sub Form_Load()
With Winsock1
.LocalPort = 12345
.Listen
End With
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Winsock1_Close()
With Winsock1
Do
If .State <> sckClosed Then
.Close
End If
Loop Until .State = sckClosed
.Listen
End With 'Winsock1
Text1.SelText = "Waiting for new client" & vbCrLf
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Winsock1
If .State <> sckClosed Then
.Close
End If
.Accept requestID
Text1.SelText = "New connection from " & .RemoteHostIP & vbCrLf
End With 'Winsock1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
Text1.SelText = "received: " & strData & vbCrLf
End Sub
'1 form with:
' 1 winsock control: name=Winsock1
' 1 textbox control: name=Text1 multiline=true scrollbars=3
Option Explicit
Private Sub Form_Load()
With Winsock1
.LocalPort = 12345
.Listen
End With
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Winsock1_Close()
With Winsock1
Do
If .State <> sckClosed Then
.Close
End If
Loop Until .State = sckClosed
.Listen
End With 'Winsock1
Text1.SelText = "Waiting for new client" & vbCrLf
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Winsock1
If .State <> sckClosed Then
.Close
End If
.Accept requestID
Text1.SelText = "New connection from " & .RemoteHostIP & vbCrLf
End With 'Winsock1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
If CheckHeader(strData) = False Then
Text1.SelText = "received: " & strData & vbCrLf
End If
End Sub
Private Function CheckHeader(strData As String) As Boolean
Dim blnHeader As Boolean
Dim strHeaderStart As String, strHeaderEnd As String
Dim strHeader As String
blnHeader = False
strHeaderStart = "@@@"
strHeaderEnd = "###"
If Left$(strData, Len(strHeaderStart)) = strHeaderStart Then
If Right$(strData, Len(strHeaderEnd)) = strHeaderEnd Then
strHeader = Mid$(strData, Len(strHeaderStart) + 1, Len(strData) - Len(strHeaderStart) - Len(strHeaderEnd))
Text1.SelText = "Header: " & strHeader & vbCrLf
blnHeader = True
End If
End If
CheckHeader = blnHeader
End Function
'1带有以下内容的表单:
'1 winsock控件:名称=Winsock1
'1 textbox控件:name=Text1 multiline=true scrollbars=3
选项显式
专用子表单_加载()
使用Winsock1
.LocalPort=12345
听
以
端接头
私有子表单_Resize()
Text1.移动0,0,缩放宽度,缩放高度
端接头
私有子Winsock1_Close()
使用Winsock1
做
如果.State sckClosed,则
关
如果结束
循环直到.State=sckClosed
听
以“Winsock1”结尾
Text1.SelText=“等待新客户机”&vbCrLf
端接头
私有子Winsock1_ConnectionRequest(ByVal requestID尽可能长)
使用Winsock1
如果.State sckClosed,则
关
如果结束
.接受请求ID
Text1.SelText=“来自”和.RemoteHostIP&vbCrLf的新连接
以“Winsock1”结尾
端接头
私有子Winsock1_数据到达(ByVal ByTestTotal长度)
将strData设置为字符串
Winsock1.GetData标准数据
Text1.SelText=“已接收:”&strData&vbCrLf
端接头
一个简单的转发项目:
'1 form with:
' 2 winsock controls: name=Winsock1 and name=Winsock2
' 1 textbox control: name=Text1 multiline=true scrollbars=3
Option Explicit
Private Sub Form_Load()
With Winsock1
.LocalPort = 23456
.Listen
End With
With Winsock2
.Connect "laptop07", 12345
End With 'Winsock2
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Winsock1_Close()
With Winsock1
Do
If .State <> sckClosed Then
.Close
End If
Loop Until .State = sckClosed
.Listen
End With 'Winsock1
Text1.SelText = "Waiting for new client" & vbCrLf
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Winsock1
If .State <> sckClosed Then
.Close
End If
.Accept requestID
Text1.SelText = "New connection from " & .RemoteHostIP & vbCrLf
End With 'Winsock1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
Winsock2.SendData strData
Text1.SelText = "forwarded: " & strData & vbCrLf
End Sub
'1带有以下内容的表单:
'2 winsock控件:name=Winsock1和name=Winsock2
'1 textbox控件:name=Text1 multiline=true scrollbars=3
选项显式
专用子表单_加载()
使用Winsock1
.LocalPort=23456
听
以
使用Winsock2
.连接“laptop07”,12345
以“Winsock2”结尾
端接头
私有子表单_Resize()
Text1.移动0,0,缩放宽度,缩放高度
端接头
私有子Winsock1_Close()
使用Winsock1
做
如果.State sckClosed,则
关
如果结束
循环直到.State=sckClosed
听
以“Winsock1”结尾
Text1.SelText=“等待新客户机”&vbCrLf
端接头
私有子Winsock1_ConnectionRequest(ByVal requestID尽可能长)
使用Winsock1
如果.State sckClosed,则
关
如果结束
.接受请求ID
Text1.SelText=“来自”和.RemoteHostIP&vbCrLf的新连接
以“Winsock1”结尾
端接头
私有子Winsock1_数据到达(ByVal ByTestTotal长度)
将strData设置为字符串
Winsock1.GetData标准数据
Winsock2.SendData标准数据
Text1.SelText=“转发:”&strData&vbCrLf
端接头
要使用,请先启动服务器,然后启动转发器
在我的示例中,服务器运行在我的笔记本电脑上,在我的网络中称为laptop07
在转发项目的代码中,将“laptop07”替换为运行服务器的机器的IP地址
服务器侦听端口12345,转发器侦听端口23456。。确保它们被允许进入防火墙
要测试它,请执行以下操作:
- 启动服务器
- 启动货代
- 让您的客户端连接到端口23456上的转发器
- 从客户端发送数据
- 看到它在转发器中被转发了吗
- 查看服务器正在接收它
这只是为了向您展示如何完成此操作服务器项目的新代码:
'1 form with:
' 1 winsock control: name=Winsock1
' 1 textbox control: name=Text1 multiline=true scrollbars=3
Option Explicit
Private Sub Form_Load()
With Winsock1
.LocalPort = 12345
.Listen
End With
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Winsock1_Close()
With Winsock1
Do
If .State <> sckClosed Then
.Close
End If
Loop Until .State = sckClosed
.Listen
End With 'Winsock1
Text1.SelText = "Waiting for new client" & vbCrLf
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Winsock1
If .State <> sckClosed Then
.Close
End If
.Accept requestID
Text1.SelText = "New connection from " & .RemoteHostIP & vbCrLf
End With 'Winsock1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
Text1.SelText = "received: " & strData & vbCrLf
End Sub
'1 form with:
' 1 winsock control: name=Winsock1
' 1 textbox control: name=Text1 multiline=true scrollbars=3
Option Explicit
Private Sub Form_Load()
With Winsock1
.LocalPort = 12345
.Listen
End With
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Winsock1_Close()
With Winsock1
Do
If .State <> sckClosed Then
.Close
End If
Loop Until .State = sckClosed
.Listen
End With 'Winsock1
Text1.SelText = "Waiting for new client" & vbCrLf
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Winsock1
If .State <> sckClosed Then
.Close
End If
.Accept requestID
Text1.SelText = "New connection from " & .RemoteHostIP & vbCrLf
End With 'Winsock1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
If CheckHeader(strData) = False Then
Text1.SelText = "received: " & strData & vbCrLf
End If
End Sub
Private Function CheckHeader(strData As String) As Boolean
Dim blnHeader As Boolean
Dim strHeaderStart As String, strHeaderEnd As String
Dim strHeader As String
blnHeader = False
strHeaderStart = "@@@"
strHeaderEnd = "###"
If Left$(strData, Len(strHeaderStart)) = strHeaderStart Then
If Right$(strData, Len(strHeaderEnd)) = strHeaderEnd Then
strHeader = Mid$(strData, Len(strHeaderStart) + 1, Len(strData) - Len(strHeaderStart) - Len(strHeaderEnd))
Text1.SelText = "Header: " & strHeader & vbCrLf
blnHeader = True
End If
End If
CheckHeader = blnHeader
End Function
'1带有以下内容的表单:
'1 winsock控件:名称=Winsock1
'1 textbox控件:name=Text1 multiline=true scrollbars=3
选项显式
专用子表单_加载()
使用Winsock1
.LocalPort=12345
听
以
端接头
私有子表单_Resize()
Text1.移动0,0,缩放宽度,缩放高度
端接头
私有子Winsock1_Close()
使用Winsock1
做
如果.State sckClosed,则
关
如果结束
循环直到.State=sckClosed
听
以“Winsock1”结尾
Text1.SelText=“等待新客户机”&vbCrLf
端接头
私有子Winsock1_ConnectionRequest(ByVal requestID尽可能长)
使用Winsock1
如果.State sckClosed,则
关
如果结束
.接受请求ID
Text1.SelText=“来自”和.RemoteHostIP&vbCrLf的新连接
以“Winsock1”结尾
端接头
私有子Winsock1_数据到达(ByVal ByTestTotal长度)
将strData设置为字符串
Winsock1.GetData标准数据
如果CheckHeader(strData)=False,则
Text1.SelText=“已接收:”&strData&vbCrLf
如果结束
端接头
私有函数CheckHeader(strData作为字符串)作为布尔值
作为布尔值的Dim blnHeader
Dim strHeaderStart作为字符串,strHeaderEnd作为字符串
作为字符串的Dim strHeader
blnHeader=错误
strHeaderStart=“@@@
strHeaderEnd=“####”
如果左$(strData,Len(strHeaderStart))=strHeaderStart,则
如果右$(strData,Len(strHeaderEnd))=strHeaderEnd,则
strHeader=Mid$(strData,Len(strHeaderStart)+1,Len(strData)-Len(strHeaderStart)-Len(strHeaderEnd))
Text1.SelText=“Header:”&strHeader&vbCrLf
blnHeader=True
如果结束
如果结束
CheckHeader=blnHeader
端函数
货运代理项目新规范
'1 form with:
' 2 winsock controls: name=Winsock1 and name=Winsock2
' 1 textbox control: name=Text1 multiline=true scrollbars=3
Option Explicit
Private Sub Form_Load()
With Winsock1
.LocalPort = 23456
.Listen
End With
With Winsock2
.Connect "laptop07", 12345
End With 'Winsock2
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Winsock1_Close()
With Winsock1
Do
If .State <> sckClosed Then
.Close
End If
Loop Until .State = sckClosed
.Listen
End With 'Winsock1
Text1.SelText = "Waiting for new client" & vbCrLf
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Winsock1
If .State <> sckClosed Then
.Close
End If
.Accept requestID
Text1.SelText = "New connection from " & .RemoteHostIP & vbCrLf
SendIP .RemoteHostIP
End With 'Winsock1
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
Winsock2.SendData strData
Text1.SelText = "forwarded: " & strData & vbCrLf
End Sub
Private Sub SendIP(strIP As String)
Dim strHeaderStart As String, strHeaderEnd As String
strHeaderStart = "@@@"
strHeaderEnd = "###"
Winsock2.SendData strHeaderStart & "IP Client:" & strIP & strHeaderEnd
End Sub
'1带有以下内容的表单:
'2 winsock控件:name=Winsock1和name=Winsock2
'1 textbox控件:name=Text1 multiline=true scrollbars=3
选项显式