Advertisement
Guest User

serverclientmapping jsr

a guest
Nov 16th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.82 KB | None | 0 0
  1. public class Server implements Runnable {
  2.  
  3. DatagramSocket socket;
  4.  
  5. public static void main(String[] args) {
  6.  
  7.     Thread discoveryThread = new Thread(Server.getInstance());
  8.     discoveryThread.start();
  9. }
  10.  
  11. @Override
  12. public void run() {
  13.  
  14.     try {
  15.  
  16.         //Keep a socket open to listen to all the UDP traffic that is destined for this port
  17.         socket = new DatagramSocket(3000, InetAddress.getByName("0.0.0.0"));
  18.         socket.setBroadcast(true);
  19.  
  20.         while (true) {
  21.             System.out.println(getClass().getName() + ": Ready to receive broadcast packets!");
  22.  
  23.             //Receive a packet
  24.             byte[] recvBuf = new byte[15000];
  25.             DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
  26.             socket.receive(packet);
  27.  
  28.             //Packet received
  29.             System.out.println(getClass().getName() + ": Discovery packet received from: " + packet.getAddress().getHostAddress());
  30.             System.out.println(getClass().getName() + ": Packet received; data: " + new String(packet.getData()));
  31.  
  32.             //See if the packet holds the right command (message)
  33.             String message = new String(packet.getData()).trim();
  34.             if (message.equals("DISCOVER_FUIFSERVER_REQUEST")) {
  35.                 byte[] sendData = "DISCOVER_FUIFSERVER_RESPONSE".getBytes();
  36.  
  37.                 //Send a response
  38.                 DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, packet.getAddress(), packet.getPort());
  39.                 socket.send(sendPacket);
  40.  
  41.                 System.out.println(getClass().getName() + ": Sent packet to: " + sendPacket.getAddress().getHostAddress());
  42.             }
  43.         }
  44.     } catch (IOException ex) {
  45.         Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
  46.     }
  47. }
  48.  
  49. public static Server getInstance() {
  50.     return DiscoveryThreadHolder.INSTANCE;
  51. }
  52.  
  53. private static class DiscoveryThreadHolder {
  54.  
  55.     private static final Server INSTANCE = new Server();
  56. }
  57. }
  58.  
  59.  
  60. public class Client {
  61.  
  62. public static void main(String[] args) {
  63.  
  64.     Client client = new Client();
  65.     client.connect();
  66.  
  67. }
  68.  
  69. public void connect() {
  70.  
  71.     try {
  72.         DatagramSocket c;
  73.         c = new DatagramSocket();
  74.         c.setBroadcast(true);
  75.         byte[] sendData = "DISCOVER_FUIFSERVER_REQUEST".getBytes();
  76.  
  77.         try {
  78.  
  79.             byte[] buf = new byte[256];
  80.             InetAddress ip = InetAddress.getByName("255.255.255.255");
  81.             DatagramPacket packet = new DatagramPacket(sendData, sendData.length, ip, 3000);
  82.             c.send(packet);
  83.             System.out.println(getClass().getName() + ": Request packet sent to: 255.255.255.255 (DEFAULT)");
  84.  
  85.         } catch (IOException e) {
  86.             e.printStackTrace();
  87.  
  88.         }
  89.  
  90.         // Broadcast the message over all the network interfaces
  91.         Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
  92.         while (interfaces.hasMoreElements()) {
  93.             NetworkInterface networkInterface = (NetworkInterface) interfaces.nextElement();
  94.  
  95.             if (networkInterface.isLoopback() || !networkInterface.isUp()) {
  96.                 continue; // Don't want to broadcast to the loopback interface
  97.             }
  98.  
  99.             for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) {
  100.                 InetAddress broadcast = interfaceAddress.getBroadcast();
  101.                 if (broadcast == null) {
  102.                     continue;
  103.                 }
  104.  
  105.                 // Send the broadcast package!
  106.                 try {
  107.                     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, broadcast, 3000);
  108.                     c.send(sendPacket);
  109.  
  110.                 } catch (Exception e) {
  111.  
  112.                 }
  113.  
  114.                 System.out.println(getClass().getName() + ": Request packet sent to: " + broadcast.getHostAddress());
  115.             }
  116.         }
  117.  
  118.         System.out.println(getClass().getName() + ": Done looping over all network interfaces. Now waiting for a reply!");
  119.  
  120.         //Wait for a response
  121.         byte[] recvBuf = new byte[15000];
  122.         DatagramPacket receivePacket = new DatagramPacket(recvBuf, recvBuf.length);
  123.         c.receive(receivePacket);
  124.  
  125.         //We have a response
  126.         System.out.println(getClass().getName() + ": Broadcast response from server: " + receivePacket.getAddress().getHostAddress());
  127.  
  128.         //Check if the message is correct
  129.         String message = new String(receivePacket.getData()).trim();
  130.         if (message.equals("DISCOVER_FUIFSERVER_RESPONSE")) {
  131.             //DO SOMETHING WITH THE SERVER'S IP (for example, store it in your controller)
  132.             System.out.println("Server's IP: " + receivePacket.getAddress());
  133.         }
  134.  
  135.         //Close the port!
  136.         c.close();
  137.     } catch (IOException ex) {
  138.  
  139.     }
  140. }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement