Перейти к содержанию
Fire Monkey от А до Я
  • 0

Поиск клиентов в сети


Рагим

Вопрос

Доброго времени суток.

Есть приложение на Windows (сервер) и есть от 1 до 4 приложений (клиенты) на Андроид. Все устройства в сети. IP адреса клиентов не известны серверу, а адрес сервера клиентам. Приложения после того как узнают адреса друг друга, будут обмениваться сообщениями через TIdTcpClient и TIdTcpServer. 

Как лучше реализовать распознавание клиентов в сети? Делаю сейчас используя Tethering, но способ мне не нравится.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Относительно стандартный виндовый способ:

сервер систематически отправляет широковещательные UDP-пакеты с информацией о своем реальном порте подключения.

клиенты, используя UDP-сервер, приняв пакет, выцепляют IP сервера и его TCP-порт, отключают UDP-сервер и пытаются законнектиться по указанному сервером порту с использованием согласованного протокола обмена.

Проблема: требуется настройка файрволла на сервере, дабы он пропустил пакеты наружу и анализ сетевого оборудования, дабы оно не резало UDP-трафик. Естественно, действует только в пределах локалки.

Ссылка на комментарий
  • 0

UDP пакет отправлять/получать при помощи TIdUDPClient/TIdUDPServer? насколько я помню там на конкретный IP отправляется. Т.е. мне надо отправить 254 пакета за раз? можете написать пример как это лучше сделать?

 

Ссылка на комментарий
  • 0
5 часов назад, Рагим сказал:

Т.е. мне надо отправить 254 пакета за раз?

нет. Отправляете как broadcast, т.е. на адрес 255.255.255.255 - пакет улетит всем, до кого в принципе сможет дойти в пределах локалки. С Indy - не подскажу, в Win с ними не работаю, а на мобильных платформах мне хватает http.

Ссылка на комментарий
  • 0
11 часов назад, kami сказал:

нет. Отправляете как broadcast, т.е. на адрес 255.255.255.255 - пакет улетит всем, до кого в принципе сможет дойти в пределах локалки. С Indy - не подскажу, в Win с ними не работаю, а на мобильных платформах мне хватает http.

Спасибо за совет. Сделал следующим образом:

Кинул на сервер TIdUDPClient. Поставил кнопку и при нажатии отрабатывает

form2.IdUDPClient1.Active:=true;
form2.IdUDPClient1.BroadcastEnabled:=true;
form2.IdUDPClient1.Broadcast(ServerIP,8090);
form2.IdUDPClient1.Active:=false;
form2.IdUDPClient1.BroadcastEnabled:=false;

 

На клиенте TIdUDPServer. 

var
  DataStringStream: TStringStream;
  ServIP: String;
begin
  DataStringStream := TStringStream.Create('');
  try
    DataStringStream.CopyFrom(AData, AData.Size);
    ServIP := DataStringStream.DataString;
  finally
    DataStringStream.Free;
  end;
  ShowMessage(ServIP);

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...