package edu.stanford.nlp.net; import java.io.*; import java.net.*; /** * Contains a couple useful utility methods related to networks. For * example, contains a method which checks if a port is available, and * contains a method which scans a range of ports until it finds an * available port. * <br> * @author John Bauer */ public class Ports { /** * Checks to see if a specific port is available. * <br> * Source: Apache's mina project, via stack overflow * http://stackoverflow.com/questions/434718/ * sockets-discover-port-availability-using-java * * @param port the port to check for availability */ public static boolean available(int port) { ServerSocket ss = null; DatagramSocket ds = null; try { ss = new ServerSocket(port); ss.setReuseAddress(true); ds = new DatagramSocket(port); ds.setReuseAddress(true); return true; } catch (IOException e) { } finally { if (ds != null) { ds.close(); } if (ss != null) { try { ss.close(); } catch (IOException e) { // should not be thrown } } } return false; } /** * Scan a range of ports to find the first available one. */ public static int findAvailable(int min, int max) { for (int port = min; port < max; ++port) { if (available(port)) { return port; } } return max; } }