Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/56: Рейтинг темы: голосов - 56, средняя оценка - 4.95
 Аватар для C17H19NO3
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382

Отправка сообщения (одним) сервером многим клиентам

20.02.2013, 02:12. Показов 10896. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Столкнулся с одним проблематичным заданием.

Есть приложение клиент-сервер. Нужно с сервера отправить сообщение всем клиентам ОДНОВРЕМЕННО по заданому времени.

Написал уже не одно подобное приложение через протокол TCP. Но суть его заключается в том, что сервер слушает запрос клиента и потом отправляет данные. У каждого клиента свое время и оно, пускай даже на несколько секунд, не совпадает.
Пробовал через протокол UDP, без проблем, если общатся один клиент - один сервер. Или если все компьютера находятся в одной доменной сети - то все работает очень хорошо, на всех машинах.
А что же делать если они не соеденены одной доменной сетью?? Пробовал груповую рассылку, подключения к группе на которую идет рассылка, но метод JoinMulticatsGroup() поддерживает диапазон IP адрессов с 224.0.0.0 до 239.255.255.255

подскажите как можно отправить одно сообщение с сервера ВСЕМ клиентам по заданому времени. И желательно чтоб не клиент запрашивал сообщение, а сервер сам решал когда хочет послать это самое сообщение.

извините, не в ту вкладку написал. переместите пожалуйста тему во вкладку C# Windows Forms.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2013, 02:12
Ответы с готовыми решениями:

Отправка сообщения всем клиентам
Пишу (пробую) чат на сокетах. Клиент на андроиде. И не могу уже день разобратся с проблемой отправки сообщения всем клиентам. Я пробовал...

Заголовок сообщения: Отправка SOAP request сервером
Добрый день! Не могу разобраться с вопросом. Есть веб-сервис работающий по протоколу SOAP. На нём региструется клиент. При первом...

Передача сообщения всем подключенным клиентам
есть класс сервера package simplenetserver; /* * To change this template, choose Tools | Templates * and open the template...

25
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
20.02.2013, 16:51
Цитата Сообщение от C17H19NO3 Посмотреть сообщение
Нужно с сервера отправить сообщение всем клиентам ОДНОВРЕМЕННО по заданому времени.
Ну думаю, что тут единственный выход, так это задавать время отправки на сервере и ровно в это время насильно отправлять всем подключенным клиентам сообщение.
1
 Аватар для C17H19NO3
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
20.02.2013, 21:49  [ТС]
в этом и заключается проблема. Как ОДНОВРЕМЕННО всем послать сообщение??
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
20.02.2013, 21:58
C17H19NO3, каждое в своем потоке и на разных портах?
P.S. А вообще затея какая-то не правильная..может надо все-таки разницу просто учитывать?
1
 Аватар для C17H19NO3
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
20.02.2013, 22:40  [ТС]
если на разных портах - тогда каждый клиент должен быть на строго определенном (для него) порте.
Может и не правельная затея, но вот захотелось реализовать. Что вы имеет введу под учетом разницы, какую разницу не учитывать??
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
20.02.2013, 23:19
подскажите как можно отправить одно сообщение с сервера ВСЕМ клиентам по заданому времени. И желательно чтоб не клиент запрашивал сообщение, а сервер сам решал когда хочет послать это самое сообщение.
Может в сторону WCF посмотреть? Там CallBack'и есть - то что доктор прописал.
1
 Аватар для C17H19NO3
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
21.02.2013, 01:45  [ТС]
можно и туда пойти, но через какой протокол это делать??. существует протокол груповой рассылки IGMP, но поддерживает он определенный диапазон айпи адрессов. Проблема не в запусках потоков, не в описании кода, а в протоколе. Какой протокол поддерживает груповую рассылку.

Но, на сколько я понял, практически не реально. Даже если спустится на самый назкий уровень - поддержка идет в рамках локальной сети. Остановился на TCP, куча серверов и один клиент, обращается по очереди к каждому серверу, за секунду посылает сигнал больее чем на 200 компов. если нужно будет, можно и потоки запустить. Но вдруг у кого какие-то идее есть - делитесь)).
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
21.02.2013, 11:27
C17H19NO3, я разницу времени рассылки имел в виду.
Просто если нужно что-то всем клиентам сделать одновременно, то тут имеет смысл высылать им еще и время задержки.
1
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.02.2013, 16:31
Цитата Сообщение от C17H19NO3 Посмотреть сообщение
если на разных портах - тогда каждый клиент должен быть на строго определенном (для него) порте.
С чего это вы взяли.
Реализуйте многопоточный сервер и все.
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
21.02.2013, 16:35
n1l, Можете объяснить подробнее?
Я не могу понять, как можно многопоточным сервером послать кучу сообщений через один порт..Ведь многопоточный доступ к ж/д прироста скорости не даст..скорее замедление. Тут очень похожая ситуация, если я правильно понимаю.
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.02.2013, 17:12
Я не понял почему вы спросили про скорость.
Но объясню, как я думаю, а думаю я так.

В реализации сервера важно то, как он передает данные. Т.е. протокол.
TCP не гарантирует целостности соединения, но зато гарантирует передачу данных.
Т.е. мы с вами должны хранить на сервере все соединения, и в определенный момент времени отправить всем подключенным клиентам сообщение. Для этого мы используем потоки, которые содержат данные о соединении для каждого клиента.
Задержка конечно будет, но она будет настолько минимальна, что я думаю никто не заметит.
Честно говоря, я не создавал коммерческих многопоточных tcp-серверов, просто я знаю, что обычно так делают.
А еще есть же синхронизация потоков, потому возможно, что сообщение все таки можно отправить сразу всем.

Если так критично, то можно попробовать сделать web-server, с реализованным на нем rest api который будет отдавать данные по требованию клиента, в заданном для него и у него времени, например через json, а приложение клиент будет их получать, десериализовывать и показывать.


Если я в чем то ошибаюсь, то думаю меня сразу поправят.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
21.02.2013, 18:05
Цитата Сообщение от C17H19NO3 Посмотреть сообщение
Остановился на TCP
Для каждого клиента устанавливать логическое соединение и отправлять? Не подойдет. В описаниях TCP/IP стека указано же, что широковещательная и групповая рассылка реализуется через UDP, однозначно.

Добавлено через 23 минуты
Для определения членства сетевых устройств в различных группах локальной сети маршрутизатор использует протокол IGMP
и вот еще:
Основная идея групповой маршрутизации состоит в том, что маршрутизаторы, обмениваясь друг с другом информацией, строят пути распространения пакетов ко всем необходимым подсетям без...
Как я понял, UDP только внутри одной локалки, так что отпадает.
Так что нужны IP Multicast + IGMP. IGMP - ответ на твой вопрос.
Цитаты с : Вики
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.02.2013, 18:14
Цитата Сообщение от IamRain Посмотреть сообщение
Как я понял, UDP только внутри одной локалки, так что отпадает.
Есть у меня сомнения на этот счет.
Сомнения основываются на том, что большинство P2P сетей, основаны на UDP.
К примеру пресловутые торренты.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
21.02.2013, 18:18
n1l, Возможно, я в протоколах мало чего знаю. IP - все лишь конверт. Возможно и с UDP.
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.02.2013, 18:32
Ну давайте пороемся что-ли. Докопаемся до сути.
Я могу рассказать об HTTP. Я знаю что http — это обычный текст.
Т.е. компьютеры обмениваются текстом в которых содержится информация, а так же команды.
Так же я знаю, что порты — это всего лишь определенные числа, закрепленные за каким-то ресурсом.
Насчет TCP, как я понимаю там более низкий уровень, связанный с набором битов.
А ниже TCP только IP.
Получается, что бы во всем разобраться, нужно начать с протокола IP, ибо для студентов инкапсуляция — зло.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
21.02.2013, 18:53
Уговорил. Offtop public researching
Как уже было сказано - нужен IP Multicast. Гуглю.

Добавлено через 16 минут
Все, дошло:
224.0.0.0 – 239.255.255.255 - диапазон адресов (передача по UDP,да), который можно назначать для групповой рассылки в каждой локальной сети. При этом о наличии подписки на рассылку спрашивает сторона маршрутизатора, "смотрящая" в эту локальную сеть. Хосты, подписавшиеся на рассылку, сами следят за наличием принадлежности к адресу подписки, и при отказе от подписки просто перестают отвечать на опросы маршрутизатора.

Что касается глобальных связей, то маршрутизаторы общаются по IGMP, и сообщают друг другу о своих подписчиках.
Все просто. IGMP - уже отдельная тема для разговора.
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.02.2013, 19:07
Видите? Все оказывается очень разумно.
Ссылочку пожалуйста будте добры.

Я читал про IP-протокол, и нашел нечто под названием broadkast. Возможно вы о нем говорили выше.

Например, 194.124.84.0 - сеть класса С, номер хоста в ней определяется последним октетом. При отправлении широковещательного сообщения оно отправляется по адресу 194.84.124.255. Номера, разрешенные для присваивания хостам: от 1 до 254 (194.84.124.1 — 194.84.124.254), всего 254 возможных адреса.
Т.е. если мы отправим с нашего tcp-сервера сообщение по адресу широковещательного канала, то оно отправится всем. А клиенты просто должны слушать определенный порт.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
21.02.2013, 19:24
Ссылка: http://telenetwork.narod.ru/bo... mcast.html
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.02.2013, 19:24
Вот нашел кстати тему о широковещательных сообщениях на cyberforum'e.
Реализация на C#.
Потрясающе, да?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
21.02.2013, 19:27
ну да Обычно поиском по сайту не пользуюсь почему-то )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2013, 19:27
Помогаю со студенческими работами здесь

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

Отправка всем клиентам
Что бы с сервера - server=socket.socket() отправить всем клиентам сообщение нужно использовать server.send()?

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

Консольный чат. Почему сервер не пересылает сообщения клиентам?
пожалуйста помогите понять почему не работает мой консольный чат! сервер using System; using System.Collections.Generic; using...

Сервер рассылает сообщения в определенное время определенным клиентам
Помогите выставить время отправки сообщений. Сервер. package network; import java.net.*; import java.io.*; import...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru