public void stop() { if (_serverSocket != null) { if (_serverAlive) { _serverAlive = false; if (_serverAcceptThread != null) _serverAcceptThread.interrupt(); _serverAcceptThread = null; for (int i = _countAcceptedClients - 1; i >= 0; i--) { _vAcceptedClientReadThread.elementAt(i).interrupt(); _vAcceptedClientPrintThread.elementAt(i).interrupt(); try { addlog("try to eject client" + String.valueOf(i)); _vAcceptedClientSocket.elementAt(i).close(); } catch (Exception e) { } } _vAcceptedClientReadThread.removeAllElements(); _vAcceptedClientPrintThread.removeAllElements(); _vAcceptedClientSocket.removeAllElements(); _vAcceptedClientID.removeAllElements(); // try { addlog("try to close server"); _serverSocket.close(); addlog("close server success"); } catch (Exception e) { addlog("close server failed"); } } _serverSocket = null; _serverEventListener.onServerConnectionStatus( GameServerEventListener.ServerConnectionStatus.DISCONNECTED); } }