2013-06-23 7 views
1

Есть ли способ отправить UDP-пакет внутри локальной сети, чтобы каждый компьютер получил его? (Конечно, никаких гарантий, потому что его UDP).Отправка пакета UDP всем в локальной сети?

Нравится, посылая запрос «Привет, кто-нибудь там?» а затем прислушиваться к ответу?

У меня нет проблемы с отправкой и получением, просто хочу знать, если есть способ, кроме пробуя каждый IP-адрес возможный ...

Edit: Это то, что я использую в данный момент:

... 
multicastSocket = new MulticastSocket(); 
multicastSocket.setBroadcast(true); 
broadcastGroup = InetAddress.getByName("255.255.255.255"); 
// multicastSocket.joinGroup(broadcastGroup); 
... 

Последняя строка кода закомментирована, поскольку она выдает исключение. Теперь я прочитал, что отправка пакета в 255.255.255.255 «устарела с года» и, скорее всего, не будет работать во многих локальных сетях. Кроме того, я не уверен, что мне понадобится MulticastSocket для этого, или если нормальный DatagramSocket будет работать. Но в любом случае, каким будет предпочтительный способ отправки UDP-трансляции в наши дни?

+1

255.255.255.255 не является допустимым адресом групповой адресации, и вы не присоединяетесь к многоадресным группам, чтобы отправлять их, но получать от них. Вам нужно решить, что именно вы делаете: трансляцию или многоадресную рассылку. Это не одно и то же. – EJP

+0

Я всегда стараюсь найти самое простое решение. Если вы находитесь в подсети класса C, я бы предложил просто отправить одноадресную рассылку всем 253 другим хостам в той же подсети. Черт, даже для класса B, почему бы и нет? Это всего лишь около 65 тысяч мест. – wookie919

+0

@ wookie919 «Почему бы и нет»? Потому что маршрутизатор, вероятно, не поддержит его? – EJP

ответ

3

Ну, я нашел его сам:

Просто откройте MulticastSocket и использовать joinGroup на любой IP между 224,0. 0,0 и 239,2555,2555,255. Конечно, все, что связано с этой группой многоадресной передачи, необходимо получать на одном IP-адресе многоадресной передачи. Я сделал это для отправки и получения, однако, я думаю, что вам нужно только при получении сообщений. Если вы хотите передать пакет всем в группе IP, просто отправьте его на выбранный IP-адрес.

Вы также должны сделать setBroadcast(true);, чтобы разрешить вещание для определенных (?) Систем.

+0

Если бы у вас было 3 хоста в группе, они бы все присоединились к группе 241.3.3.7, например? Затем один хост отправляет пакет в 241.3.3.7, и он будет поступать на всех хостах, прослушивающих 241.3.3.7? – RenegadeAndy

+0

@RenegadeAndy Точно, за исключением того, что 241. *. *. * Не находится в пределах поддерживаемого диапазона. – AyCe

-1

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

Вот Java учебник, чтобы помочь вам добиться того, что:

http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html

+0

Спасибо, я посмотрю ... – AyCe

+0

Я использую новый MulticastSocket(); прямо сейчас с setBroadcast (true) ;. Поскольку я не хочу получать, а просто отправлять сообщения, это похоже на работу, для целевого адреса я использую InetAddress.getByName («255.255.255.255»); все приложения, прослушивающие порт, я отправляю его для его получения. multicastSocket.joinGroup (адрес); выбрасывает исключение, но работает без него ... – AyCe

+0

Ответ неверен. «MulticastSocket» не требуется при трансляции. Это для, ошибка, многоадресная передача. Опять же, это не одно и то же. Ссылка, которую вы цитируете, неверно сформулирована: речь идет о многоадресной передаче, а не о вещании. Я сообщил об ошибке. – EJP

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