2014-01-22 2 views
0

У меня есть два vb6 приложения, одно клиентское приложение & другой сервер приложения, как общается с помощью управления Winsock То, что я хочу это:запроса вперед клиента к другому серверу через прокси-сервер в VB6

, что мне требуется сделать, или попробуйте сделать приложение сервера автоматически «Port Forward» входящего соединения от клиента на другой сервер.

Пример: IP клиента является 0.0.0.0 Мой IP является IP 1.1.1.1 программы является 2.2.2.2

Нормальная программа соединения между Клиентом и Программа Клиент будет подключаться к программе нормально, и программа чтения клиента IP как 0.0.0.0

С этим сервером, когда клиент (0.0.0.0) подключается к My IP (1.1.1.1), My IP (серверное приложение), будет принимать соединение с клиентом и подключать клиента к программному IP-адресу (2.2.2.2). Поэтому, когда программа считывает IP-адрес клиента, он будет читать как 1.1.1.1.

Так как достичь this..please опубликовать образец кода

Я попытался добавить еще один элемент управления Winsock на сервере приложений &, связанных с фактическим сервером, но как я могу направить запрос клиента к реальному серверу через сервер приложение! Пожалуйста, напишите с образцом кода .. это будет оценено. enter image description here

+0

Пожалуйста, помогите .. – Rudys

ответ

0

новый код для серверного проекта:

'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 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

Спасибо за помощь и принятие этих усилий. Это работает – Rudys

0

извините за поздний ответ ...

очень простое и простое решение может быть следующее:

простой проект сервера:

'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: 
' 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 

, чтобы использовать первый запуск s ервере, а затем начать Экспедитором

в моем примере сервер работает на моем ноутбуке, который, как известно, в моей сети, как laptop07

в коде проекта экспедиторской заменить «laptop07» с IP-адресом компьютера где у вас есть сервер

сервер прослушивает порт 12345, переадресатор прослушивает порт 23456 ..убедитесь, что они будут разрешены в брандмауэре

проверить:

  • запустить сервер
  • начать форвардер
  • пусть ваш клиент подключиться к экспедитору на порту 23456
  • отправить данные из ваш клиент
  • см. его пересылку в пересылке
  • см. его получение сервером

иметь в виду, что это очень простой проект без каких-либо ошибок улавливающего

это просто, чтобы показать вам, как это можно сделать

+0

эй спасибо за код .. работает, однако, когда экспедитор отправляет запрос серверу, сервер показывает только имя клиента. Я хочу ip too.i.e. если клиент подключается к переадресатору на ip 1.1.1.1, то после пересылки клиента на сервер пересылкой он должен отображать сервер ip (127.0.0.1), например, например, новое соединение из имени клиента в 127.0.0.1 .. – Rudys

+0

вы можете указать это примером .. – Rudys

Смежные вопросы