Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Преодоление препятствий. Роутеры и серые IP


Автор: boobie 28.8.2013, 10:16
Здравствуйте!
С помощью каких компонентов Indy (и не только) можно решить проблему с подключением к компьютеру, который находится за, например, роутером (т.е. при написании клиент-серверной программы).
Как, зная IP адреса машины (и локальный, и внешний), сделать это?
Ведь браузеры и, например, Skype как-то работают на таких машинах.

Дополнительный проброс портов ручками на стороне, настройка роутера и пр. - это не то, что надо. Т.е. пользователь качает "Скайп, контру, браузер" и у него все работает сразу, из коробки. Как сделать так же  smile ? 

По сути, эта тема - продолжение этой: http://forum.vingrad.ru/forum/topic-370935.html

С сетью стал разбираться совсем недавно, сильно не пинайте. Теперь нужно создавать свой VPN? В какую сторону идти?

Автор: Illusion Dolphin 28.8.2013, 11:49
А что если взяться за https://www.google.com/search?q=upnp&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a#fp=bfd31e136490d2b7&q=UPnP+delphi&rls=org.mozilla:en-US%3Aofficial

Цитата

Скайп

Это очень хитрая программа, умеет UPuP, сама находит прокси, и говорят, что творит чудеса smile К тому же она использует "авторизационные" сервера, которые могут помогать маршрутизации в теории. 

Цитата

контру

UPuP думаю

Цитата

браузер

А ему ничего не нужно, максимум прокси настроить

Цитата

создавать свой VPN?

Зачем?

Автор: boobie 28.8.2013, 12:12
А как подключится к серверу за роутером? Использую открытые порты (80 и 443, те же, что и у скайпа, в надежде, что пройдет...) и не могу законнектится. Он может подключится ко мне, я - нет. У меня белый IP, у него белый ip у роутера. ПК подрублен к роутеру, у ПК локальный адрес. Тот же скайп работает нормально. 
Да прочитал про UPnP, круто, но...
Я догадываюсь, что проблема в непосредственной передаче данных от роутера к ПК.
Я использую Idtcpserver\client указываю белые адреса. 

Т.е. мой чатик прекрасно работает в локальной сети или при использовании реальных IP адресов в интернете.

Автор: Illusion Dolphin 28.8.2013, 14:38
Цитата

 Он может подключится ко мне, я - нет.

Ну тогда можно попробовать использовать ещё "пассивный режим", когда всё делается через одно соединение. Т.е. чтобы взаимосвязываться он делает соединение к серверу чтобы получать данные с сервера и отправлять данные на сервер и второго соединения получается что не надо smile

Добавлено через 2 минуты и 58 секунд
Цитата

Да прочитал про UPnP, круто, но...

Это используется чтобы настроить проброс если такое поддерживается

Цитата

Я догадываюсь, что проблема в непосредственной передаче данных от роутера к ПК.

А такое даже не обязательно. Можно даще использовать внешний сервер ак посредник (метод ICQ). Skype вообще траффик перегоняет через клиентов, которых благо много и у некоторых белые айпи smile Координируется я думаю через внешние сервера у него

Автор: boobie 29.8.2013, 06:48
Цитата

Ну тогда можно попробовать использовать ещё "пассивный режим", когда всё делается через одно соединение. Т.е. чтобы взаимосвязываться он делает соединение к серверу чтобы получать данные с сервера и отправлять данные на сервер и второго соединения получается что не надо

Классно, и как это реализовать? Есть какие то компоненты в Делфях... Или на чистом Апи писать? Ссылки и литратура ф-ф-ф-ф-студию очень нужны.
Цитата

Это используется чтобы настроить проброс если такое поддерживается

А если делать сеть из 10-30 машин, то это ведь понадобится. Про UPnP бегло посмотрел. Трудно учится по отрывкам из гугла. Справочник бы какой...
 smile 
Литературы по сетевому программированию в Делфи так мало, может на С# ее больше? smile 

Автор: Antony41 30.10.2013, 21:59
Советую почитать книгу "О чем не пишут в книгах по Delphi" там подробно рассказывается о написании сетевых приложений

Автор: Akella 4.11.2013, 15:13
Программа-сервер должна быть открыта и слушать, например, порт 80. Если программа за NAT`ом, то нужно выполнить переадресацию портов.
А клиент, зная внешний IP программы-сервера и порт, подключается.
Т.е. одна из сторон должна глядеть наружу.

Цитата(boobie @  28.8.2013,  12:12 Найти цитируемый пост)
А как подключится к серверу за роутером?

На роутере, т.е. на маршрутизаторе, будь то модем или ПК, нужно выполнить переадресацию портов из вне в локальную сеть, на тот ПК, где работает серверная часть.

Добавлено через 4 минуты и 11 секунд
Если программа-клиент не знает внешнего IP, куда подключаться, то программа-сервер должна где-то указать свой внешний IP.
Т.е. должен быть где-то третий сервер. Так сказать, связующий. С постоянным адресом. И клиент, и сервер к нему подключаются. Сервер оставляет там свой адрес, а клиент узнает адрес сервера.
Можно сделать третий сервер без программы. Например, программа-сервер заходит по HTTP на какой-нибудь хост и в текстовом файле оставляет свой IP. Клиент тоже заходит туда и читает его.

Автор: boobie 13.11.2013, 05:59
Случайно заметил, что тема ожила.
Цитата

Если программа за NAT`ом, то нужно выполнить переадресацию портов.

Это должен делать хозяин машины "ручками", или это можно реализовать программно с помощью Дельфей?
А если, например, провайдер предоставляет только серые IP-адреса, тогда между конечной машиной и белым адресом может оказаться не один NAT... Что тогда?

UPnP представляется более простым способом... Достаточно иметь один сервер с реальным белым АйПи, все сообщения проходят через него. Но я с этим так и не разобрался. Хотя очень хочу, данная тема очень интересна и однозначно пригодится.

Автор: Vas 13.11.2013, 07:06
Цитата(boobie @  13.11.2013,  05:59 Найти цитируемый пост)
Это должен делать хозяин машины "ручками", или это можно реализовать программно с помощью Дельфей?

Ручками. 

Цитата(boobie @  13.11.2013,  05:59 Найти цитируемый пост)
UPnP представляется более простым способом...  

Вроде как UPnP позволяет автоматически сделать проброс портов на роутере, но данную возможность хозяин роутера может отключить. uTorrent, Steam и т.д. используют UPnP

Цитата(boobie @  13.11.2013,  05:59 Найти цитируемый пост)
Достаточно иметь один сервер с реальным белым АйПи, все сообщения проходят через него. Но я с этим так и не разобрался. Хотя очень хочу, данная тема очень интересна и однозначно пригодится. 

TeamViewer вроде как по такому принципу работает, только вот использует ли он UPnP или нет - не знаю.

Автор: boobie 13.11.2013, 12:21
Vas, как его реализовать? Примерчик какой-нибудь... А лучше мануал на русском=). Сколько книг читал - везде простейшие примеры применения Винсок и пара самых простых примеров на инди... И все!
 smile 
Вот мысль такая появилась, что если запилить книгу по Дельфям, такую, в которой РЕАЛЬНО будет собрано то, о чем не говорится в других книгах. ДРКБ - это хорошо, но, это как нарезка статеек и форумных цитат. Урывками. И там не все есть. И ничего не объясняется часто. Если все эксперты форума, которые неравнодушны к Дельфям объединятся и попробуют создать что-нибудь подобное. Без всяких описаний Хелловорлд и Баттон - об этом и так все сказано. А о сетевом программировании (инди и без инди), стандартных графических средствах, OPENGL.... не знаю... о многопотоке, там тоже много всяких хитростей. Мечты, мечты...

Автор: Vas 13.11.2013, 15:13
boobie, нету примеров, только теорию знаю и все :( 
Вот в сети попалось, но не тестил  
http://www.whitebear.ch/upnp.htm и вот http://www.sql.ru/forum/635125/upnp

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)