Newer
Older
ServerTester / src / main / java / info / istlab / ServerTester / Server.java
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;
    }
}