![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
petlyura |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: нет Всего: 2 |
Доброе время, форумчане!
![]() Возникла задача: одна программа (пусть сервер) отправляет с какой-то периодичностью (0.1 сек, к примеру) данные другим программкам (клиентам). Короче, делаю это через сокет. Раньше как было: сервер находился на одной машине, а клиенты - по 1 шт. на других (в т.ч. мог и на той, где сервер). Рассылал через мультикаст. Сейчас стал вопрос: а можем ли мы запустить 2-3 клиента на той же машине, где и сервер. Запустить то можем, но кроме первого клиента, остальные на этой машине пока отказываются принимать данные. Вижу проблему в том, что шлю данные на один и тот же порт. Помогите с элегантным решением. Я вижу какое-то топорное: заставить клиентов слушать каждому свой порт, а серверу несколько сокетов использовать для рассылки. А может порт один, а IP-шники у клиентов в рамках одной машины разные? Спасибо. Если что написал непонятное, спрашивайте )) |
|||
|
||||
Finalist |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.5.2006 Репутация: нет Всего: 1 |
У тебя клиенты слушают порты? Это уже серверки получаются а не клиенты..
Схема такова, что сервер слушает один порт.. клиенты подключаются к нему, и держат соединение. Сервер периодически посылает пакет по открытому сокету. На одной машине можно поднять таких клиентов очень много, все они подключаться к твоему серверу по одному порту, и все это будет работать. |
|||
|
||||
petlyura |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: нет Всего: 2 |
Пусть серверки. Я их клиентами назвал, т.к. их много, а раздатчик данных - один. Я честно не понял дальше. Ну вот я пока запускаю кучу копий "получателей", но лишь первая из них принимает, остальные - нет. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
С Майкрософтом будет очень не просто(((
Во-первых, на каждый клиентский сокет должна быть выставлена опция SO_REUSEADDR (пример). Во-вторых, даже это может не гарантировать правильной работы (например, хотя Бог его знает, как там были инициализированы reuse, inaddr и mreq). Это сообщение отредактировал(а) feodorv - 19.8.2013, 13:39 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
petlyura |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: нет Всего: 2 |
у меня Win7 32-битная. Заработало с SO_REUSEADDR. Спасибо! ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |