2011-06-27 1 views
1

Я пишу программу, которая получает потоки UDP, которые отправляются на групповой адрес многоадресной передачи. Предположим, что у меня есть адрес, например udp://249.0.0.1. К этому адресу я получаю два потока для двух разных портов, например 2500 и 2600. Мне нужно написать программу на C, которая извлекает оба потока из другого порта в рамках одной программы. Можете ли вы предложить отправную точку (учебные пособия, полезные API-интерфейсы, ...)?Извлечь потоки из многоадресного адреса UDP

+1

По сути, вы хотите, чтобы кто-нибудь написал основы для многоадресного клиента для вас бесплатно? В Интернете много примеров кода и руководств, в которых описывается, как это сделать. – unpythonic

+0

@Mark Mann: Извините, но я не мог найти помощь в сети – iwant2learn

+0

Вот пара, которая выглядит прилично: http://www.tenouk.com/Module41c.html http://www.tack.ch/multicast/и вот несколько книг: http://www.nmsl.cs.ucsb.edu/MulticastSocketsBook/ и http://www.amazon.com/Unix-Network-Programming-Sockets-Networking/dp/0131411551 (Библия). Если вы не читали Стивенса, я настоятельно рекомендую его. Это объяснит мультиплексирование нескольких соединений, а также многоадресное программирование сокетов. – unpythonic

ответ

1

Создайте 2 гнезда UDP, зарегистрируйтесь как для многоадресного адреса.

Вы можете получить данные либо с:

  • 2 процессов (вилки), блокирующих сокетов.
  • 2 нити (pthread), блокирующие розетки.
  • 1 нить, неблокирующие розетки. Для демультиплексирования вам нужно выбрать опрос или опрос.
+0

еще раз спасибо yi_H ... Когда я использую select, poll или epoll, я смогу слушать только по одному порту за раз. но нужно постоянно слушать оба порта. :( – iwant2learn

+0

все они были специально разработаны для одновременного прослушивания файловых дескрипторов mulitple (вы можете даже смешивать сокеты, трубы, стандартные io). Примеры кода книги Стивенса доступны онлайн, проверьте их. –

+0

спасибо большое Yi_H :) – iwant2learn