public void run() {
        Logger.info("Haduki Server started.");
        System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
        System.out.println(" Haduki Server");
        System.out.println(" ver 1.0(2007/08/17)");
        System.out.println("          (C)PSI/Pegasus 2007");
        System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
        try {
            ServerSocket s_sock = new ServerSocket(Port);
            s_sock.setSoTimeout(500);
            Socket sock;
            while (Running) {
                try {
                    sock = s_sock.accept();
                } catch (SocketTimeoutException e) {
                    continue;
                }
                InetAddress addr = sock.getInetAddress();
                if (!Filter.check(addr)) {
                    continue;
                }
                if (!Sem.tryAcquire()) {
                    Logger.info("<" + addr.getHostName() +
                                ">Server Busy. Kicked.");
                    continue;
                }
                System.out.println("߂łƂI");
                Thread connection = new Connection(Sem, UserManager, sock);
                connection.start();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        Logger.info("Haduki Server stopped.");
    }