Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправить сообщение на несколько UDP-портов, отправить клиентам на одной машине 
V
    Опции темы
petlyura
Дата 19.8.2013, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: нет
Всего: 2



Доброе время, форумчане! smile

Возникла задача: одна программа (пусть сервер) отправляет с какой-то периодичностью (0.1 сек, к примеру) данные другим программкам (клиентам). Короче, делаю это через сокет. Раньше как было: сервер находился на одной машине, а клиенты - по 1 шт. на других (в т.ч. мог и на той, где сервер). Рассылал через мультикаст. Сейчас стал вопрос: а можем ли мы запустить 2-3 клиента на той же машине, где и сервер. Запустить то можем, но кроме первого клиента, остальные на этой машине пока отказываются принимать данные. Вижу проблему в том, что шлю данные на один и тот же порт. Помогите с элегантным решением. Я вижу какое-то топорное: заставить клиентов слушать каждому свой порт, а серверу несколько сокетов использовать для рассылки. А может порт один, а IP-шники у клиентов в рамках одной машины разные? 

Спасибо. Если что написал непонятное, спрашивайте )) 
PM MAIL   Вверх
Finalist
Дата 19.8.2013, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 23.5.2006

Репутация: нет
Всего: 1



У тебя клиенты слушают порты? Это уже серверки получаются а не клиенты.. 
Схема такова, что сервер слушает один порт.. клиенты подключаются к нему, и держат соединение. Сервер периодически посылает пакет по открытому сокету.
На одной машине можно поднять таких клиентов очень много, все они подключаться к твоему серверу по одному порту, и все это будет работать.
PM MAIL   Вверх
petlyura
Дата 19.8.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: нет
Всего: 2



Цитата(Finalist @ 19.8.2013,  11:09)
У тебя клиенты слушают порты? Это уже серверки получаются а не клиенты.. 
Схема такова, что сервер слушает один порт.. клиенты подключаются к нему, и держат соединение. Сервер периодически посылает пакет по открытому сокету.
На одной машине можно поднять таких клиентов очень много, все они подключаться к твоему серверу по одному порту, и все это будет работать.

Пусть серверки. Я их клиентами назвал, т.к. их много, а раздатчик данных - один.

Я честно не понял дальше. Ну вот я пока запускаю кучу копий "получателей", но лишь первая из них принимает, остальные - нет.


PM MAIL   Вверх
feodorv
Дата 19.8.2013, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



С Майкрософтом будет очень не просто(((

Во-первых, на каждый клиентский сокет должна быть выставлена опция SO_REUSEADDR (пример).
Во-вторых, даже это может не гарантировать правильной работы (например, хотя Бог его знает, как там были инициализированы reuse, inaddr и mreq).

Это сообщение отредактировал(а) feodorv - 19.8.2013, 13:39


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
petlyura
Дата 19.8.2013, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: нет
Всего: 2



Цитата(feodorv @ 19.8.2013,  13:39)
С Майкрософтом будет очень не просто(((

Во-первых, на каждый клиентский сокет должна быть выставлена опция SO_REUSEADDR (пример).
Во-вторых, даже это может не гарантировать правильной работы (например, хотя Бог его знает, как там были инициализированы reuse, inaddr и mreq).

у меня Win7 32-битная. Заработало с SO_REUSEADDR. Спасибо!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.