2012-03-25 3 views
0

У меня есть два потока, сообщающихся через DatagramSockets. Теперь я хотел бы, чтобы третий поток мог слушать сообщение. После прочтения Broadcasting to Multiple Recipients кажется, что два MulticastSockets на третьем потоке - это то, что я ищу.Возможно ли это с разъемами?

Однако при попытке привязки MulticastSockets к тем же портам, которые используются DatagramSockets в первых двух потоках, я получаю сообщение «java.net.BindException: Address is the used: Can not bind».

ответ

1

С помощью некоторых ответов и комментариев здесь я решил это, выполнив следующее.

Я изменил 2 оригинальных потока, чтобы использовать сокеты многоадресной передачи для связи, а третий поток теперь имеет 2 сокета Mulitcast, привязанных к этим портам, чтобы он мог слушать сообщение. Вероятно, это не самое красивое решение, но этого будет достаточно для моих нужд.

0

Ну, вы получаете исключение, потому что вы не можете привязывать несколько сокетов к одному и тому же порту. Если вы хотите поддерживать как точечную, так и многоадресную рассылку, вам нужно будет обозначать разные порты для каждого. В противном случае, если вы всегда выполняете многоадресную рассылку, вы можете просто полностью удалить обычные сокеты.

+0

Да, вы можете предоставить (на Java) все это MulticastSockets. – EJP

+0

Ваш ответ на 100% неверен, это так просто. Итак, ваш комментарий, который применяется к TCP, а не UDP. – EJP

+0

Я должен был добавить 'или у всех было 'setReuseAddress (true)', вызываемое на них, которое по умолчанию используется для 'MulticastSocket'.' – EJP

0

У вас есть два потока в одной программе, сообщающиеся через сокет? Как насчет создания queue для них, так что это просто в процессе общения?

+0

Я соглашаюсь с очередью, но повторю ваш второй абзац, да, вы можете, при условии (на Java) все они являются MulticastSockets. – EJP

+0

Я прочитал его вопрос, пытаясь использовать порт, который Datagram уже включен для приема многоадресных пакетов. – Bill

+0

Если у всех сокетов есть 'setReuseAddress (true)', вызываемый на них, который по умолчанию используется для 'MulticastSocket', они могут использовать один и тот же порт. – EJP

Смежные вопросы