• 0
Akromd

Поиск сервера

Вопрос

Добрый вечер.

Только начал изучать технологию Datasnap. Разобрался с простейшим сервером и клиентом, находясь в одной сети все прекрасно работает.

Но сейчас ставлю перед собой задачу, что клиенту изначально неизвестен ip сервера, но знаем что он находится в одной сети. Сразу возникает мысль послать широковещательный пакет от клиента и при получении его сервером отправить ответ.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

31 ответ на этот вопрос

  • 0

А технология Tethering не подойдёт? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Там как раз примерно так все и делается )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
9 часов назад, Alexander сказал:

А технология Tethering не подойдёт? 

А она будет работать в связке с datasnap? Сейчас попробую использовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

С её помощью вы найдёте клиентов для сервера и произведёте обмен настройками для datasnap

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А теперь такой вопрос...а возможно ли сделать datasnap сервер на android ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

ну, в теории, ничего не мешает

на практике, мобильные устройства должны засыпать иногда. а сервера - не должны

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

даже в теории сервер на мобиле не должен быть)

может кто пользуется (я нет) оф. приложение фейсбука и есть сервер.

в теории: 3rd party приложения общаются не с сервером (api facebook.com), а приложением установленным в телефоне через SDK.

что в реале: батарейка улетает в 0, дробление единого сервиса на несколько приложении (имхо)

 

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, ZuBy сказал:

даже в теории сервер на мобиле не должен быть)

может кто пользуется (я нет) оф. приложение фейсбука и есть сервер.

в теории: 3rd party приложения общаются не с сервером (api facebook.com), а приложением установленным в телефоне через SDK.

что в реале: батарейка улетает в 0, дробление единого сервиса на несколько приложении (имхо)

 

Да, идейно все это правильно, что сервер на мобиле ересь)

Но как тогда поступают в случае общения двух клиентов минуя сервер?

То есть обычно (в моем понимании) реализуется запрос клиента у сервера чего либо, таким образом получая и изменяя данные на сервере. В результате другой клиент может получить измененную информацию с сервера. А если мы хотим миновать сервер? чтобы клиент делал запрос сразу другому клиенту? А сервер используем только для того, чтобы в первый раз лишь сказать клиентам где они находятся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

и как же два клиента общаются, минуя сервер, интересно? 

я и так знаю, где находятся мои клиенты - за роутером в локальной сети

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 минуты назад, krapotkin сказал:

и как же два клиента общаются, минуя сервер, интересно? 

я и так знаю, где находятся мои клиенты - за роутером в локальной сети

Имеется ввиду, что один из них становится сервером для другого клиента.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

ну, ладно, пусть становится, а по какому IP доступ-то? 192.168.143.41 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
6 минут назад, krapotkin сказал:

ну, ладно, пусть становится, а по какому IP доступ-то? 192.168.143.41 ?

Имеет значение? Я не понимаю технологии процесса,через какие компоненты все это осуществить в Delphi. Если использовать datasnap то все понятно, когда у нас сервер на компе и через него все запросы. Но что сделать, если мы хотим сервер облегчить, оставив в функционале только связывание клиентов друг с другом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

такс, давайте разберемся. для ясности

1) приложения на каких платформах будет работать?

2) будет использоваться БД?

3) всегда приложения в одной сети будет?

4) datasnap обязательно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
7 минут назад, ZuBy сказал:

такс, давайте разберемся. для ясности

1) приложения на каких платформах будет работать?

2) будет использоваться БД?

3) всегда приложения в одной сети будет?

4) datasnap обязательно?

Да, отбъясняю я не очень)

1. Приложение мультиплатфотрменное. Все что поддерживает FMX на тех платформах и будет приложение.

2. БД пока не используется, и не планируется. Но мало ли.

3. Не всегда. Чаще всего не в одной сети, для этого использую стационарный сервер со статическим ip. Но хотелось бы чтоб когда два и более приложения были в одной сети, они имели возможность соединятся без стационарного сервера.

4. Не обязателен. Просто ничего другого мультиплатформенного не придумал. И с Datasnap уже что-то понял и это работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

тетеринг в одной сети отработает нормально

можно и датаснап использовать

а в разные сети только через центральный сервер

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

как по мне, если есть белый ip, то больше ничего не нужно выдумывать (масштабировать проект проще)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 минуты назад, krapotkin сказал:

тетеринг в одной сети отработает нормально

можно и датаснап использовать

а в разные сети только через центральный сервер

С тетерингом какие то проблемы, но это другая тема, мне еще разбираться и разбираться.

С разными сетями все работает, но все вычисления производятся на сервере (их довольно много),а клиенты запросами получают данные. Чем больше клиентов, тем больше вычислений. Соответственно и хотелось бы скинуть вычисления на клиентов (Разбить на группы) и данные будут передаваться между этими группами. А на сервер посылаются только итоги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
31 минуту назад, Akromd сказал:

Соответственно и хотелось бы скинуть вычисления на клиентов

Как-то не понятно, что мешает каждому клиенту читать данные с сервера, проводить вычисления, итоги скидывать на сервер?

Изменено пользователем GASCHE

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, GASCHE сказал:

Как-то не понятно, что мешает каждому клиенту читать данные с сервера, проводить вычисления, итоги скидывать на сервер?

Проблема в том что все вычисления зависят от данных других клиентов. Без них никаких вычислений не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Перефразирую, читать данные других клиентов с сервера, проводить вычисления, итоги и свои данные скидывать на сервер.

12 часов назад, Akromd сказал:

они имели возможность соединятся без стационарного сервера

Это возможно, на каждом клиенте поднимаете свой сервер, который будет слушать запросы других клиентов и скидывать им требуемые данные. Но не думаю, что это будет проще чем работа с одним сервером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 часа назад, GASCHE сказал:

Перефразирую, читать данные других клиентов с сервера, проводить вычисления, итоги и свои данные скидывать на сервер.

Это возможно, на каждом клиенте поднимаете свой сервер, который будет слушать запросы других клиентов и скидывать им требуемые данные. Но не думаю, что это будет проще чем работа с одним сервером.

И мы опять возвращаемся к вопросу как поднять сервер на android)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Akromd сказал:

И мы опять возвращаемся к вопросу как поднять сервер на android)

В данном случае под сервером понимается серверный сокет с необходимыми обработчиками событий. Смотрите индейцев и выбирайте любой понравившийся.

Но гораздо проще взять готовую технологию - AppTethering. С самостоятельной реализацией вы рискуете погрязнуть в энтомологоии, особенно - если возьмете минималистичный протокол (TCP/IP).

Обратите внимание, что в любом случае устройства сконнектятся друг с другом только если они находятся в одной подсети.

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, kami сказал:

В данном случае под сервером понимается серверный сокет с необходимыми обработчиками событий. Смотрите индейцев и выбирайте любой понравившийся.

Но гораздо проще взять готовую технологию - AppTethering. С самостоятельной реализацией вы рискуете погрязнуть в энтомологоии, особенно - если возьмете минималистичный протокол (TCP/IP).

Обратите внимание, что в любом случае устройства сконнектятся друг с другом только если они находятся в одной подсети.

Об телеринге я уже задумался. Однако первоначальная идея что устройства соединяются не в одной подсети.

Видимо все таки придется копать инди, а так хотелось с датаснапом легко и быстро)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

ничего не понял

что не так с датаснапом?

сервер кладется на форму вроде как обычно, не?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Здравствуйте! Я не спец в сетях, но дискуссия интересная :)

В 4.1.2017 в 20:01, Akromd сказал:

Но сейчас ставлю перед собой задачу, что клиенту изначально неизвестен ip сервера, но знаем что он находится в одной сети. Сразу возникает мысль послать широковещательный пакет от клиента и при получении его сервером отправить ответ.

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

Нужно установить DataSnap на известный порт и из одной сети бросить пакет на 0.0.0.0 из любого клиента. Или все не так просто?

 

В 6.1.2017 в 15:40, ZuBy сказал:

может кто пользуется (я нет) оф. приложение фейсбука и есть сервер.

Я всегда думал, что это long poll requests или websockets. А это как бы не сервер, потому что соединение инициировано самим приложением...

 

14 часов назад, GASCHE сказал:

Это возможно, на каждом клиенте поднимаете свой сервер, который будет слушать запросы других клиентов и скидывать им требуемые данные. Но не думаю, что это будет проще чем работа с одним сервером.

К сожалению, два клиента не могут соединиться друг с другом, даже если они сервера, потому что сети разные :( А соединение двух клиентов должно обязательно проходить через один сервер. Мне кажется, делается так: сервер получает пакеты одного клиента и просто перебрасывает их второму. VPN так работает, например.

Если я не прав, поправьте, мини проверка своих знаний получается :) 

Изменено пользователем Zawuza

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: Аров Марат (Coolmarat)
      Здравствуйте, коллеги.
      При написании клиента под андроид для Datasnap сервера столкнулся с проблемой, что из телефона строки с русскими буквами
      уходят в нечитаемом виде на сервер. При запуске приложения под Windows проблемы нет. Даже тестовые методы, генерируемые
      мастером создания DataSnap сервера (EchoString, ReverseString) не работают с русским текстом при запуске клиента на
      андроиде. Прилагаю тестовые проекты сервера и клиента с вызовом одной только функции ReverseString - у меня все равно
      выходят кракозябры. Помогите разобраться, как правильно передавать строки с русскими буквами.

      DSTestStrAndroidServer.zip
      DSTestStrAndroidClient.zip
    • Автор: dim
      есть сервер DataSnap, если после подключения к нему клиента сервер выключит и включить снова то клиент выдает ошибку
      если отловив ее на клиенте делаю    
      SQLConnection1.Connected:= False; 
      SQLConnection1.Connected:= True;
      все равно не работает дальше, надо закрыть программу и снова открыть
      как избавится от этого?
      xe10.1
    • Автор: FREEFAR
      Доброе время суток всем!
      Очень нужна помощь профессионалов, любителей и тех кто просто имеет опыт в этом деле. Пишу приложение под платформу Android и возникла потребность загружать фото на сервер приложений с устройств.  Все построено  на Datasnap.
      на клиенте    
      ImageStream := TMemoryStream.Create; image1.Bitmap.SaveToStream(ImageStream); FileName := taskf.TASKNUMBER+'_'+AnsiReplaceStr(AnsiReplaceStr(datetimetostr(now),'.',''),':',''); Bytes := ClientModule1.ServerMethods1Client.UploadImage(FileName,ImageStream); при вызове функции загрузки падает: no mapping for the unicode character exists
      Что интересно : если делать по http все проходит 
      только переключаю  на https не работает...
      А в требованиях СИБ сами знаете....
      Если кто знает в чем секрет, помогите пжл.
      Какая инфа нужна будет - предоставлю. 
      Заранее сорян за косоязычность - первый пост как никак
       
    • Автор: beklexx
      Здравствуйте товарищи.
      Помогите выявить одну проблему, а то уже не знаю как с этим бороться, странно что даже гугл не помогает.
      В общем есть несколько клиентов на андроиде, так вот они изредка перестают цепляться к datasnap серверу. Причём не все сразу, к примеру один отвалился а другие норм работают.

      Решается только методом полного сброса смартфона и закачки клиента обратно.
      Как я понял это происходит если ставят какой либо другой софт на смартфон, кодировка или ещё что изменяется.
      Как это выявить я так и не допёр, есть какое мнение?
      Заранее благодарю.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу