Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Server implements Runnable {
- DatagramSocket socket;
- public static void main(String[] args) {
- Thread discoveryThread = new Thread(Server.getInstance());
- discoveryThread.start();
- }
- @Override
- public void run() {
- try {
- //Keep a socket open to listen to all the UDP traffic that is destined for this port
- socket = new DatagramSocket(3000, InetAddress.getByName("0.0.0.0"));
- socket.setBroadcast(true);
- while (true) {
- System.out.println(getClass().getName() + ": Ready to receive broadcast packets!");
- //Receive a packet
- byte[] recvBuf = new byte[15000];
- DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
- socket.receive(packet);
- //Packet received
- System.out.println(getClass().getName() + ": Discovery packet received from: " + packet.getAddress().getHostAddress());
- System.out.println(getClass().getName() + ": Packet received; data: " + new String(packet.getData()));
- //See if the packet holds the right command (message)
- String message = new String(packet.getData()).trim();
- if (message.equals("DISCOVER_FUIFSERVER_REQUEST")) {
- byte[] sendData = "DISCOVER_FUIFSERVER_RESPONSE".getBytes();
- //Send a response
- DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, packet.getAddress(), packet.getPort());
- socket.send(sendPacket);
- System.out.println(getClass().getName() + ": Sent packet to: " + sendPacket.getAddress().getHostAddress());
- }
- }
- } catch (IOException ex) {
- Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public static Server getInstance() {
- return DiscoveryThreadHolder.INSTANCE;
- }
- private static class DiscoveryThreadHolder {
- private static final Server INSTANCE = new Server();
- }
- }
- public class Client {
- public static void main(String[] args) {
- Client client = new Client();
- client.connect();
- }
- public void connect() {
- try {
- DatagramSocket c;
- c = new DatagramSocket();
- c.setBroadcast(true);
- byte[] sendData = "DISCOVER_FUIFSERVER_REQUEST".getBytes();
- try {
- byte[] buf = new byte[256];
- InetAddress ip = InetAddress.getByName("255.255.255.255");
- DatagramPacket packet = new DatagramPacket(sendData, sendData.length, ip, 3000);
- c.send(packet);
- System.out.println(getClass().getName() + ": Request packet sent to: 255.255.255.255 (DEFAULT)");
- } catch (IOException e) {
- e.printStackTrace();
- }
- // Broadcast the message over all the network interfaces
- Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
- while (interfaces.hasMoreElements()) {
- NetworkInterface networkInterface = (NetworkInterface) interfaces.nextElement();
- if (networkInterface.isLoopback() || !networkInterface.isUp()) {
- continue; // Don't want to broadcast to the loopback interface
- }
- for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) {
- InetAddress broadcast = interfaceAddress.getBroadcast();
- if (broadcast == null) {
- continue;
- }
- // Send the broadcast package!
- try {
- DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, broadcast, 3000);
- c.send(sendPacket);
- } catch (Exception e) {
- }
- System.out.println(getClass().getName() + ": Request packet sent to: " + broadcast.getHostAddress());
- }
- }
- System.out.println(getClass().getName() + ": Done looping over all network interfaces. Now waiting for a reply!");
- //Wait for a response
- byte[] recvBuf = new byte[15000];
- DatagramPacket receivePacket = new DatagramPacket(recvBuf, recvBuf.length);
- c.receive(receivePacket);
- //We have a response
- System.out.println(getClass().getName() + ": Broadcast response from server: " + receivePacket.getAddress().getHostAddress());
- //Check if the message is correct
- String message = new String(receivePacket.getData()).trim();
- if (message.equals("DISCOVER_FUIFSERVER_RESPONSE")) {
- //DO SOMETHING WITH THE SERVER'S IP (for example, store it in your controller)
- System.out.println("Server's IP: " + receivePacket.getAddress());
- }
- //Close the port!
- c.close();
- } catch (IOException ex) {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement