Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > Отправить сообщение на несколько UDP-портов |
Автор: petlyura 19.8.2013, 10:18 |
Доброе время, форумчане! ![]() Возникла задача: одна программа (пусть сервер) отправляет с какой-то периодичностью (0.1 сек, к примеру) данные другим программкам (клиентам). Короче, делаю это через сокет. Раньше как было: сервер находился на одной машине, а клиенты - по 1 шт. на других (в т.ч. мог и на той, где сервер). Рассылал через мультикаст. Сейчас стал вопрос: а можем ли мы запустить 2-3 клиента на той же машине, где и сервер. Запустить то можем, но кроме первого клиента, остальные на этой машине пока отказываются принимать данные. Вижу проблему в том, что шлю данные на один и тот же порт. Помогите с элегантным решением. Я вижу какое-то топорное: заставить клиентов слушать каждому свой порт, а серверу несколько сокетов использовать для рассылки. А может порт один, а IP-шники у клиентов в рамках одной машины разные? Спасибо. Если что написал непонятное, спрашивайте )) |
Автор: Finalist 19.8.2013, 11:09 |
У тебя клиенты слушают порты? Это уже серверки получаются а не клиенты.. Схема такова, что сервер слушает один порт.. клиенты подключаются к нему, и держат соединение. Сервер периодически посылает пакет по открытому сокету. На одной машине можно поднять таких клиентов очень много, все они подключаться к твоему серверу по одному порту, и все это будет работать. |
Автор: petlyura 19.8.2013, 11:14 | ||
Пусть серверки. Я их клиентами назвал, т.к. их много, а раздатчик данных - один. Я честно не понял дальше. Ну вот я пока запускаю кучу копий "получателей", но лишь первая из них принимает, остальные - нет. |
Автор: feodorv 19.8.2013, 13:39 |
С Майкрософтом будет очень не просто((( Во-первых, на каждый клиентский сокет должна быть выставлена опция http://msdn.microsoft.com/en-us/library/ms740621%28VS.85%29.aspx (http://pastebin.com/Z4eMHXEj). Во-вторых, даже это может не гарантировать правильной работы (http://forum.ixbt.com/post.cgi?id=print:26:40732, хотя Бог его знает, как там были инициализированы reuse, inaddr и mreq). |
Автор: petlyura 19.8.2013, 15:24 | ||
у меня Win7 32-битная. Заработало с SO_REUSEADDR. Спасибо! ![]() |