Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95

Не работает передача данных по интернету

01.01.2013, 22:01. Показов 6592. Ответов 87
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем доброго времени суток
написал небольшую игру с передачей данных по протоколу UDP (Indy)
в локальной сети все работает нормально, а через интернет идет только в одну сторону

в чем может быть проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.01.2013, 22:01
Ответы с готовыми решениями:

Передача данных по интернету
Есть два компьютера, нужно с одного отослать несколько цифр на другой и только. Предполагаю, что нужно наличие клиента и сервера, который...

Передача данных по интернету
Всем привет, кто знает как передавать данные по тсп через интернет? Пробовал через сокеты и TcpClient, но у меня получилось только по...

Передача данных между ПК по интернету
сабж, сколько исходников не перекопал, все на моем компе работают, а между двумя не хотят. Что я неправильно делаю? Вот например нашёл...

87
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
04.01.2013, 22:58  [ТС]
Студворк — интернет-сервис помощи студентам
SInClient.Send(ABinding.PeerIP,21584,'IO ');
какая тут может быть ошибка?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.01.2013, 23:04
Цитата Сообщение от Iriskin Посмотреть сообщение
21584
Откуда взялась эта цифирь ?
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
04.01.2013, 23:14  [ТС]
просто понравилась)
решил использовать этот порт
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.01.2013, 23:23
Цитата Сообщение от Iriskin Посмотреть сообщение
просто понравилась
Ну ясно. То есть строго от балды.
Лучше бы тебе понравилось выяснить хоть что-нибудь про то как работают различные типы трансляторов сетевых адресов (NAT) в части UDP.

Добавлено через 2 минуты
Вот краткий ликбез на эту тему.
1
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
05.01.2013, 17:44  [ТС]
спасибо, почитаю

Добавлено через 18 часов 7 минут
Прочитал про NAT, совсем запутался, и снова ничего не работает
клиент посылает данные на порт 21580
сервер получает данные, пришедшие с порта 59753 и посылает ответ на тот же порт
клиент ничего не получает
сервер посылает данные на порт 21580
клиент снова ничего не получает

PS: клиент подключен к интернету через роутер
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.01.2013, 18:29
Цитата Сообщение от Iriskin Посмотреть сообщение
клиент посылает данные на порт 21580
сервер получает данные, пришедшие с порта 59753 и посылает ответ на тот же порт
клиент ничего не получает
Должен получить при любом типе NAT, если:

1. Этому не препятствуют правила файрволов на стороне клиентского хоста и на стороне роутера для входящих UDP-пакетов с портом назначения 59753
2. Сервер получив дейтаграмму от клиента ответил ему немедленно (к примеру, не позднее чем через 30 секунд)
3. Таблица маршрутизации на стороне роутера имеет соотв.записи.

Цитата Сообщение от Iriskin Посмотреть сообщение
сервер посылает данные на порт 21580
клиент снова ничего не получает
Должен получить если:
1. см. п.п.1,3 выше
2. в правилах маршрутизации роутера так или иначе создано правило форвардинга входящих на порт 21580 UDP-пакетов со внешнего интерфейса на внутренний с адресом и портом назначения ClientHostIPAddress:ClientPort
3. Клиент ожидает входящие UDP-пакеты именно на порту ClientPort
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
05.01.2013, 18:41  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
3. Таблица маршрутизации на стороне роутера имеет соотв.записи.
это же должно автоматически делаться

Добавлено через 1 минуту
а какой порт надо слушать в первом варианте?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.01.2013, 18:57
Цитата Сообщение от Iriskin Посмотреть сообщение
это же должно автоматически делаться
В подавляющем большинстве маршрутизаторов - да.

Цитата Сообщение от Iriskin Посмотреть сообщение
какой порт надо слушать в первом варианте?
Это неважно.

Ты утверждаешь что инициатором UDP-обмена в 1-м варианте выступает клиент, и его сообщение сервер успешно получает, после чего сервер отвечает на тот же порт, с которого он получил сообщение от клиента.

Время между получением запроса и отправкой ответа не должно превышать десятков-сотен секунд (обычно от полуминуты до двух, конкретное время зависит от конкретной реализации и настроек конкретного NAT-устройства)
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
05.01.2013, 19:35  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Ты утверждаешь что инициатором UDP-обмена в 1-м варианте выступает клиент, и его сообщение сервер успешно получает, после чего сервер отвечает на тот же порт, с которого он получил сообщение от клиента.
да, именно так

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
IdUDPClient1.Send(ABinding.PeerIP,ABindi ng.PeerPort,'OK');
...
end;

Добавлено через 1 минуту
но клиент (за маршрутизатором) ничего не получает
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.01.2013, 19:51
Цитата Сообщение от Iriskin Посмотреть сообщение
IdUDPServer1UDPRead(
Цитата Сообщение от Iriskin Посмотреть сообщение
IdUDPClient1.Send

Ну вот тебе и твоя ошибка, грубейшая причем :

Зачем тебе на стороне сервера еще и IdUDPClient ? У него совершенно другой порт источника, поэтому НАТ на стороне клиента посылает это сообщение на три буквы !

Отвечай клиенту через тот же сокет, через который сервер получил входящую дейтаграмму от удаленного клиента.
Этот сокет представлен серверу в Read-событии параметром ABinding.

Причем не тяни резину с ответом - через максимум пару минут НАТ на стороне клиента практически наверняка пошлет ответ сервера на те же буквы.
1
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
05.01.2013, 19:53  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Отвечай клиенту через тот же сокет, через который сервер получил входящую дейтаграмму от удаленного клиента.
то есть так?
ABinding.SendTo(ABinding.PeerIP,ABinding .PeerPort,AData,AData.Size);
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.01.2013, 20:01
Ну хотя бы так.
И даже еще проще - ABinding.Send('ответ')
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
05.01.2013, 20:45  [ТС]
Delphi
1
2
3
4
5
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
begin
ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,AData,AData.Size);
end;
Добавлено через 1 минуту
не заметил переход на новую страницу*

Добавлено через 2 минуты
это тоже не сработало
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.01.2013, 21:02
Значит не судьба.
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
05.01.2013, 22:16  [ТС]
а есть какая-нибудь более конкретная статья про NAT и Delphi?

Добавлено через 7 минут
с примерами может быть...
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
06.01.2013, 00:18
Цитата Сообщение от Iriskin Посмотреть сообщение
это тоже не сработало
А это уже и не НАТом пахнет.
Это уже попахивает ошибкой в использовании чего-то там под названием "AData"
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
06.01.2013, 11:15  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Это уже попахивает ошибкой в использовании чего-то там под названием "AData"
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type TSendDate = record
  a,b,c : integer;
  s : string[20];
end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var SD : TSendDate;
begin
SD.a:=5;
SD.s:='OK';
ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,SD,SizeOf(SD));
end;
может так?

Добавлено через 1 час 18 минут
и это не работает

а какие еще могут быть препятствия?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
06.01.2013, 14:54
ABinding.Send(SD,SizeOf( SD));

Покажи код клиентской стороны
0
7 / 7 / 2
Регистрация: 18.10.2012
Сообщений: 95
06.01.2013, 20:07  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Покажи код клиентской стороны
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPClient1.Send('IP сервера',21580,'client');
log.Lines.Add('Отправлен запрос : client');
end;
 
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var SD : TSendDate;
begin
AData.ReadBuffer(SD,AData.Size);
log.Lines.Add('Получен ответ : '+SD.s);
end;
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
06.01.2013, 20:14
Ну что тут сказать ?
Теми же граблями по тому же лбу)

Зачем ты на клиентской стороне используешь TIdUDPServer ?
Тебе там TIdUDPClient'а мало ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2013, 20:14

Передача данных, клиент-сервер по интернету
Здравствуйте, простой чат на основе Winsock, не работает через интернет, т.е. данные только от клиента серверу передаются без ошибок и...

Возможна ли передача данных по Wi-Fi и интернету между Java и C#?
Нужно передавать данные о файлах между Android и Windows. Сам уверен, что это возможно, но на всякий случай решил спросить.

Почему не работает? передача данных
index.html <HTML> <HEAD> <TITLE>HTML Form</TITLE> </HEAD> <BODY> <FORM ACTION='Handleform.php'> First Name...

Не работает передача данных с формы
<html><body> <form action=hello.php> Логин: <input type=text name="login" value=""><br> Пароль: <input type=password...

как работает передача данных на сервер?
как работает передача данных на сервер в той области, что я делаю функцию вставляю туда х=2 у=5 получить элемент о, а на сервере скрипт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Video: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru