package info.istlab.ServerTester; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; public class Server implements Runnable { public ServerSocket serverSocket; Thread thread; int expectedPort; String expectedAddress; public Server(int port, String bindaddress) { expectedPort = port; expectedAddress = bindaddress; try { serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress(bindaddress, port)); } catch (IOException e) { System.err.println(e); System.err.println("バインド失敗。ポート番号 " + port + " (Bind-address: " + bindaddress + " 向け) がすでにつかわれているようです"); System.err.println("ポート番号またはバインドアドレスを変更してください。"); System.err.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。"); } System.out.println(getClass().getName() + " [" + bindaddress + ":" + port + "] started."); } public void handleRequest() { } public void start() { thread = new Thread(this); thread.start(); } public void run() { while (thread != null) { if (serverSocket.isClosed()) { thread = null; } if (thread != null && !serverSocket.isClosed()) { try { handleRequest(); } catch (Exception e) { System.err.println(e); thread = null; } } } } public String getBindAddress() { return serverSocket.getInetAddress().toString(); } public int getPort() { return serverSocket.getLocalPort(); } public boolean isClosed() { return serverSocket.isClosed(); } public String getExpectedAddress() { return expectedAddress; } public int getExpectedPort() { return expectedPort; } public void restart() { try { serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress(expectedAddress, expectedPort)); start(); } catch (IOException e) { e.printStackTrace(); } } public void close() { try { serverSocket.close(); } catch (IOException e) { System.err.println(e); } thread = null; } }