-1
我試圖通過Java使用Java.io在LAN上查找lantronix設備。 * API如何通過Java.io在本地網絡中找到lantronix設備API
我需要使用UDP協議才能通過端口30718在網絡中廣播IP。當我廣播它們時,我將收到網絡設備的響應。
我需要一些方法來使UDP廣播檢索PC在網絡上的響應。
在此先感謝。
我試圖通過Java使用Java.io在LAN上查找lantronix設備。 * API如何通過Java.io在本地網絡中找到lantronix設備API
我需要使用UDP協議才能通過端口30718在網絡中廣播IP。當我廣播它們時,我將收到網絡設備的響應。
我需要一些方法來使UDP廣播檢索PC在網絡上的響應。
在此先感謝。
解決方案:
package testbroadcastudp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
/**
* @since 03-05-2017
* @author jsanchez
*/
public class UDPBroadcastToLantronixDevices {
public static void main(String[] args){
//Port 30718 for sent at Lantronix devices
try (DatagramSocket serverSocket = new DatagramSocket(30718))
{//30718 50000
byte[] queryMsg = new byte[4];
queryMsg[0] = (byte)0x00;
queryMsg[1] = (byte)0x00;
queryMsg[2] = (byte)0x00;
queryMsg[3] = (byte)0xF6;//Dec 246
String testByte = new String(queryMsg,StandardCharsets.ISO_8859_1);
serverSocket.setBroadcast(true);
DatagramPacket datagramPacket = new DatagramPacket(
queryMsg,
queryMsg.length,
InetAddress.getByName("192.168.1.255"),//192.168.1.201
30718
);
//Send broadcast
serverSocket.send(datagramPacket);
//Close Broadcast socket to close the 30718 port.
serverSocket.close();
//Start the listening from the server
receive();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
static void receive(){
//Port 30718 for listen Lantronix devices
try (DatagramSocket clientSocket = new DatagramSocket(30718)) {
byte[] buffer = new byte[4];
// Set a timeout of 3000 ms to listen in the server side
clientSocket.setSoTimeout(3000);
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
/**
* The receive method will wait for 3000 ms for data.
* After that, the server will throw a timeout exception.
*/
clientSocket.receive(datagramPacket);
System.out.println("Listen on " + datagramPacket.getAddress() + " from " + datagramPacket.getData().toString() + " port " + datagramPacket.getPort());
String receivedMessage = new String(datagramPacket.getData());
//Decode to get the 0xF7 or '÷' in the byte[4] for a Lantronix Devices in the LAN
receivedMessage = new String(datagramPacket.getData(), StandardCharsets.ISO_8859_1);
System.out.println(receivedMessage);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("Timeout. Client is closing.");
}
}
}