2017-06-08 31 views

回答

0

解決方案:

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."); 
     } 
    } 
} 
相關問題