Широковещательная передача UDP в Java

Доброе утро.

Я являюсь довольно новым в Java и сокетных соединениях, но я пытаюсь отослать пакет/широковещательную передачу UDP на 255.255.255.255 на порте 8001 к устройству. Я могу заставить данные отправлять очень хорошо, однако когда они прибывают время для получения данных время соединения. У меня есть анализатор пакетов, и я вижу, что пакет отправляет, и затем устройство отвечает.

Я вполне уверен, это - ошибка новичка, которую я пропускаю в своем коде, но я застрял на нем некоторое время, и любая справка ценилась бы.

 m_Socket = new DatagramSocket(m_SERVERPORT);
 InetAddress address = InetAddress.getByName(m_SERVERIP);


 m_DataPack = new DatagramPacket(m_SERVERCMD.getBytes(), m_SERVERCMD.getBytes().length,
 address, m_SERVERPORT);
 m_Socket.setBroadcast(true);
 m_Socket.connect(address, m_SERVERPORT);

 m_Socket.send(m_DataPack);
 m_DataPack = new DatagramPacket(data, data.length,
 address, m_SERVERPORT);


 m_Socket.receive(m_DataPack); // This is where it times out


 data = m_DataPack.getData();
 String received = data.toString();
 System.out.println("Received: " + received);
 m_Socket.close();

Спасибо и Gig' Em.

Править:

Я не уверен, помогает ли это, но когда я смотрю, m_Socket возразить I видит следующее право, прежде чем это отправит:

bound = true;
close = false;
connectedAddress = Inet4Address (id = 32) (-1,-1,-1,-1);
connectedPort = 8001;
connectState = 1;
created = true;
impl = PlainDatagramSocketImpl;
oldImpl = false;

и объект m_DataPack следующий:

address = Inet4Address (id = 32) (-1,-1,-1,-1);
bufLength = 6 (size of packet I'm sending is 6 char long);
offset = 0;
port = 8001;
6
задан user355528 1 June 2010 в 15:14
поделиться

2 ответа

Если вы хотите получить дейтаграмму, вам нужно bind() к локальной конечной точке (адрес + порт).

1
ответ дан 8 December 2019 в 15:59
поделиться

Это не имеет смысла. Вы транслируете, что является 1 ко многим, и вы также соединяетесь, что является 1 к 1. Что из этого?

Потеряйте соединение. И потеряйте 255.255.255.255. Это уже 20 лет как устарело. Используйте локальный широковещательный адрес подсети, например, 192.168.1.255.

11
ответ дан 8 December 2019 в 15:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: