package network; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; import util.Log; public class UDP { public static interface ReceiveListener { public void onReceive(String message); } public static class Server implements Runnable { private static final long SLEEP_TIME = 100; private static final int MAX_LENGTH = 2000; private DatagramSocket mySocket; private boolean running = true; private ReceiveListener myReceiveListener; private boolean listenToTheMusic; public Server(int serverPort) { try { mySocket = new DatagramSocket(serverPort); } catch (SocketException e) { e.printStackTrace(); } Thread t = new Thread(this); t.start(); } public void closeConnection() { mySocket.close(); running = false; } @Override public void run() { while (running) { if (listenToTheMusic) { byte[] message = new byte[MAX_LENGTH]; DatagramPacket p = new DatagramPacket(message, message.length); try { mySocket.receive(p); } catch (IOException e) { e.printStackTrace(); } if (listenToTheMusic) myReceiveListener.onReceive(new String(message, 0, p .getLength())); } try { Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } } public void receivePackage(ReceiveListener receiveListener) { myReceiveListener = receiveListener; listenToTheMusic = true; } public void pauseListening() { listenToTheMusic = false; } public void resumeListening() { listenToTheMusic = true; } } public static class Client { private static final String MY_TAG = "Network"; private String myIp; private int myServerPort; private DatagramSocket mySocket; public Client(String serverIp, int serverPort) { myIp = serverIp; myServerPort = serverPort; try { mySocket = new DatagramSocket(); } catch (SocketException e) { e.printStackTrace(); } } /** * @param message * @return true if the message could be send */ public boolean sendPackage(String message) { try { if (myIp == null) { Log.e(MY_TAG, "No ip set!");// , maybe no internet // connection?"); return false; } InetAddress local = InetAddress.getByName(myIp); mySocket.send(new DatagramPacket(message.getBytes(), message .length(), local, myServerPort)); return true; } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public void closeConnection() { mySocket.close(); } } /** * iterates over all network interfaces (3G, WiFi,..) to find the ip * * @return null if there is no connection available */ public static String getDeviceIp() { try { for (Enumeration<NetworkInterface> interfaces = NetworkInterface .getNetworkInterfaces(); interfaces.hasMoreElements();) { NetworkInterface netInterface = interfaces.nextElement(); for (Enumeration<InetAddress> ipAddresses = netInterface .getInetAddresses(); ipAddresses.hasMoreElements();) { InetAddress inetAddress = ipAddresses.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException e) { e.printStackTrace(); } return null; } }