Мне нужно установить TCP-соединение с компьютера вашего дома на мой офисный компьютер.
На офисе есть роутер, к которому подключены несколько компьютеров. Этот маршрутизатор имеет Интернет, поэтому все компьютеры, подключенные к тому, что маршрутизатор также имеют Интернет. В моем доме у меня есть компьютер с доступом в Интернет. Мне нужен мой офисный компьютер, чтобы действовать как сервер и мой домашний компьютер для подключения к нему. Раньше я имел возможность подключаться к переадресации портов на сервере как:
NATUPNPLib.UPnPNATClass upnpnat;
NATUPNPLib.IStaticPortMappingCollection mappings;
public ServerExample()
{
InitializeComponent();
upnpnat = new NATUPNPLib.UPnPNATClass();
mappings = upnpnat.StaticPortMappingCollection;
// server local IP address
mappings.Add(1300, "TCP", 1300, "192.168.150.146", true, "plsease work");
// this code tels the router to forward all tcp traffic comming from port
// 1300 to the server computer (it's lan ip address happens to be 192.168.150.146)
//...
, и я смог подключиться из моего дома. (Я знаю, что простым способом будет открывать порты на офисном маршрутизаторе и переслать их на мой компьютер, проблема в том, что у меня нет доступа к офисному маршрутизатору)
Теперь они заменили маршрутизатор в мой офис с помощью Новее, и я не могу использовать свой код. Теперь, с новым маршрутизатором, когда я выполняю собственный код, который я получаю:
Обратите внимание, что отображения возвращаются NULL; Поэтому я не могу добавить сопоставление.
Я уверен, что должен быть способ установить связь, потому что некоторые люди в офисе используют Limewire, например или бит торрент. Я думаю, что моя проблема связана с разрешениями, может быть? Как я могу решить это?
.
.
.
.
.
.
Хорошо, так что я полагаю, что я пытался делать то, что вы, ребята, разместили на этот вопрос с C #: Хорошо, позвольте мне показать вам, что я сделал:
Примечание. Вам может понадобиться обратиться к этой диаграмме, чтобы понять Что я буду объяснить:
Как вы знаете, я хочу установить соединение TCP между компьютером A и компьютером B. То, как мне удается сделать это, это делая то, что называется разветвлением TCP Punch.
Шаг 1: Первое, что я делаю, это начать слушать новые соединения на сервере S.
TcpListener server = new TcpListener(System.Net.IPAddress.Parse(“192.168.11.109”), 55550);
Server.Start();
var client = server.AcceptSocket(); \\ wait here until someone connects
Шаг 2: Теперь подключитесь к серверу с помощью компьютера A AS:
TcpClient tcpClient = new TcpClient("192.168.11.109", 55550);
Шаг 3: После выполнения шага 2 кода на компьютере отладки сервера должны выглядеть как:
Шаг 4: Теперь наша цель состоит в том, чтобы подключиться к компьютеру B к компьютеру A. Server S имеет информацию, необходимую B, чтобы установить соединение. На самом деле мне придется установить связь между компьютером B и Server S, чтобы Server S может дать B соответствующие параметры, чтобы B для подключения к A.
Шаг 5: Поскольку я отладку, я могу видеть параметры, поэтому я сделаю компьютер сервером сейчас, слушая порта 3313. Я хочу, чтобы компьютер был слушать сейчас на этом порту (3313), потому что все пакеты отправляются на маршрутизатор X с портом 3313 следует отправлять на компьютер A.
\\ COMPUTER A
TcpListener server = new TcpListener(System.Net.IPAddress.Parse("192.168.0.120"), 3313);
server.Start();
var newClient = server.AcceptSocket(); \\ wait here until a client gets connected
Шаг 6: Таким образом, компьютер A должен слушать новые соединения на порту 3313. Опять же Port 3313 важен, потому что маршрутизатор X должен пересылать все пакеты, полученные из этого порта к компьютеру A.
Компьютер A ждет новых соединений.
Шаг 7: Так что теперь быстро! Мы хотим установить, что соединение с компьютера B. на сервере Reality S передаст параметры, но так как я просто пытаюсь сделать эту работу, я напишу программу действительно быстро на компьютере B.
TcpClient tcpClient = new TcpClient(“192.168.11.108”, 3313);
\\192.168.11.108 is the address of router X
Наконец:
по какой-то причине Компьютер B не способен подключаться к компьютеру A.
Причина, по которой он не может подключиться, это потому, что маршрутизатор X не пересылал пакеты на компьютер A. (я знаю это, потому что я включил переадресацию порту на порт 54540 На маршрутизате x и когда я использую этот порт, он работает), я имею в виду, я не понимаю, почему маршрутизатор X не пересылал трафик, поступающий из порта 3313 на компьютер A. Компьютер A уже установил соединение с сервером S и все вещи, которые сервера Отправлено на маршрутизатор X через порт 3313 отправлен на компьютер A. Почему, если я отправлю пакеты на маршрутизатор X через порт 3313, они не получают компьютер A!?
PS:
Обратите внимание, что все, что я здесь показал, у меня на самом деле есть три маршрутизатора X, Y и Z, а также у меня есть сервер S, компьютер A и компьютер B: