Java MulitcastSocket получить метод "Блокирует программу"? - PullRequest
1 голос
/ 09 декабря 2011

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

Я хотел бы знать, есть ли способ, которым я могу слушать его только определенную продолжительность, скажем, 5 секунд?

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

//Connect to the multicast host, and join the group
  MulticastSocket msConn = new MulticastSocket(5540);
  InetAddress netAddr = InetAddress.getByName("239.255.255.255");
  msConn.joinGroup(netAddr);

//Preapre a datagram packet in which to place recieved data
  byte buf[] = new byte[1024];
  DatagramPacket pack = new DatagramPacket(buf, buf.length);

//PROBLEM: Code halts here until data is recieved
//Accoding the the Java Docs it says that
//"This method blocks until a datagram is received."
  msConn.recieve(pack);

Спасибо, что уделили время.

1 Ответ

3 голосов
/ 09 декабря 2011

Используйте метод setSoTimeout(), чтобы установить тайм-аут для получения дейтаграммы. Затем, согласно документации для recieve(), по истечении времени ожидания будет выдано SocketTimeoutException, что позволит вам продолжить работу с программой.

...