2012-05-26 2 views
0

У меня ограниченный опыт Java Socket и все это с использованием TCP. Я пытаюсь узнать UDP. Я запускаю многопроцессорное приложение, использующее многоадресную рассылку UDP. После небольшого исследования (и моего зарождающегося понимания темы), я думал, что многоадресная рассылка будет правильным подходом.UDP Multicast правильный выбор?

Метафорически я хочу, чтобы все процессы делились одной и той же «комнатой» и должны «кричать» друг на друга. Поэтому, когда процесс 1 отправляет сообщение «привет», я хочу, чтобы весь процесс 2..n получил этот пакет и наоборот.

Сначала казалось, что все работает, но потом я понял, что у меня есть ошибка (если вы можете это назвать). Я запускаю первый процесс, и когда я запускаю второй, первый процесс получает второе сообщение, но не наоборот.

Мне было интересно, когда я делаю MulticastSocket receive() по процессу 1, является ли это эффективным, что DatagramPacket за стек, который затем обрабатывает 2, не видит, когда это делает recieve()?

ответ

2

Проблема не в выборе протокола - TCP/IP не поможет, и ни один из них не будет передавать UDP.

Проблема заключается в том, что сетевые стеки операционной системы не буферизуют сетевой трафик, когда в данный момент его не слушают. И это то, что происходит в отношении второго процесса.

Короче говоря, ваша схема не может работать.


Одна альтернатива должна иметь «новый» процесс многоадресной «Кто там» сообщение, и все другие реагируют с групповой или направленного пакета. Однако вы изобретаете колесо здесь. Эта проблема была решена много раз раньше с помощью различных «промежуточных» стеков.

+0

Спасибо за быстрый и тщательный ответ. Наверное, я реализую схему, которая есть. : / – Ternary

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