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


Автор: Чупакабро 7.7.2011, 18:50
Есть UDP клиент и сервер (совмещены в одной программе). 
В локальной сети (или в ее эмуляции с помощью программ вроде Hamachi) все замечательно работает, данные передаются.
Когда пытаюсь установить связь между компьютерами через интернет, соответственно ничего не работает. Айпишники динамические.
Что делать, как быть?

Автор: xkor 9.7.2011, 01:06
Цитата(Чупакабро @  7.7.2011,  18:50 Найти цитируемый пост)
ничего не работает

хотите чтобы вам помогли - выражайтесь конкретнее, тут не телепаты сидят...
программа учитывает возможные потери UDP пакетов?
размеры у этих пакетов не слишком большие? чем больше размер тем на больше число кусков он будет разбит из за MTU (которое в инете может быть крайне мелким) и тем выше вероятность что пакет не дойдет.

Автор: kami 9.7.2011, 15:09
Цитата(xkor @  9.7.2011,  01:06 Найти цитируемый пост)
программа учитывает возможные потери UDP пакетов?размеры у этих пакетов не слишком большие? чем больше размер тем на больше число кусков он будет разбит из за MTU (которое в инете может быть крайне мелким) и тем выше вероятность что пакет не дойдет.

Рано еще говорить о протоколе обмена. Кроме того, некоторые отправляемые данные могут не нуждаться в гарантированном приеме.
Чтобы он (пакет) хоть куда-то ушел, нужно знать адрес корреспондента. (броадкасты отбросим сразу).
В случае динамических IP это (мягко говоря) проблематично. Кроме того, не исключена возможность того, что оба компьютера сидят за NAT, что еще больше усложняет процесс обмена.

Цитата(Чупакабро @  7.7.2011,  18:50 Найти цитируемый пост)
Что делать, как быть?

В общем случае задача связи динамических IP по UDP не имеет решения.

Добавлено через 2 минуты и 4 секунды
Цитата(Чупакабро @  7.7.2011,  18:50 Найти цитируемый пост)
В локальной сети (или в ее эмуляции с помощью программ вроде Hamachi) все замечательно работает

Hamachi работает через собственный сервер, имеющий статический IP. 
Итого общая схема работы hamachi получается компьютер <=>сервер<=>компьютер.

Автор: Чупакабро 9.7.2011, 15:31
я немного уточню
динамические айпишники известны на момент подключения
дело не в том, что я не знаю, куда коннектиться, а в том, что нет этого коннекта
размеры пакетов делал разными от 128 до 2048 байт

Автор: kami 9.7.2011, 17:01
Цитата(Чупакабро @  9.7.2011,  15:31 Найти цитируемый пост)
динамические айпишники известны на момент подключения

адрес одного из компьютеров в студию.

Цитата(Чупакабро @  9.7.2011,  15:31 Найти цитируемый пост)
нет этого коннекта

при работе по UDP говорить о "коннекте" несколько некорректно, ибо его на самом деле нет (в отличие от TCP)

Автор: Чупакабро 10.7.2011, 12:34
Цитата(kami @  9.7.2011,  17:01 Найти цитируемый пост)
адрес одного из компьютеров в студию

91.215.79.94 

Код сервера:
Код

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
begin
 idUDPServer1.ReceiveBuffer(buf,bufsize);
 pb1:=@buf[0];
 pb2:=@s[0];
 move(pb1^,pb2^,buf[0]+1);
 label1.Caption:=s;
end;

Код клиента:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 s:=edit1.Text;
 zeromemory(@buf[0],bufsize);
 pb1:=@buf[0];
 pb2:=@s[0];
 move(pb2^,pb1^,length(s)+1);
 idUDPClient1.SendBuffer(labelededit1.Text,idudpclient1.Port,buf,bufsize);
end;

Автор: xkor 10.7.2011, 13:27
Цитата(Чупакабро @  9.7.2011,  15:31 Найти цитируемый пост)
динамические айпишники известны на момент подключения
а IP эти выдаются компам на которых программа или компы за натом?

Автор: Чупакабро 10.7.2011, 15:23
компы за роутером, как минимум) ну и доступ в инет через локалку наверное подразумевает NAT
а айпишники я по ламерски смотрю через Яндекс "мой ip" (91.215.79.94 ), 
то есть на самих компах-то другие ip, типа 192.168.1.103 - они выдаются роутером

Автор: kami 10.7.2011, 15:34
Цитата(Чупакабро @  10.7.2011,  15:23 Найти цитируемый пост)
а айпишники я по ламерски смотрю через Яндекс, 

Это не по-ламерски. Это правильно. Внутренние IP здесь не помогут.
Вот только доступ через NAT связан с большими трудностями. Единственное, что я нашел в интернете - оба компьютера для установления обмена должны сперва "подолбиться" корреспонденту. Тогда временно установится разрешение на прохождение пакетов из внешнего мира в локалку. Потому что изначально пакет уходит от клиента, проходит через NAT спокойно, доходит до места, где должна пройти переадресация "внешний IP"=>"внутренний IP", и там зависает, потому что у маршрутизатора есть разрешение выпускать изнутри, а вот про переадресацию снаружи внутрь он не знает.

Автор: Чупакабро 10.7.2011, 15:46
то есть маршрутизатор будет думать, что он получает пакеты в ответ на выпущенные и станет переадресовывать входящие вовнутрь?
если так, то забавно) сервер должен заранее знать всех клиентов
p.s. Спасибо за помощь!

Автор: kami 10.7.2011, 16:24
Цитата(Чупакабро @  10.7.2011,  15:46 Найти цитируемый пост)
Спасибо за помощь!

Это не помощь, а предположение smile

Автор: Akella 22.7.2011, 11:02
Чупакабро, почитай http://forum.vingrad.ru/topic-48020/125.html
некоторым помогает

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