在聊天程序中断开服务器与套接字的连接

时间:2016-04-23 20:08:58

标签: java server

manage.py runserver

我认为关闭服务器套接字会断开服务器。我错过了什么吗?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试关闭任何套接字的服务器套接字......

public class MyServer {
    public static final int PORT = 12345;
    public static void main(String[] args) throws IOException, InterruptedException {
        ServerSocket ss = ServerSocketFactory.getDefault().createServerSocket(PORT);
        Socket s = ss.accept();
        Thread.sleep(5000);
        ss.close();
        s.close();
    }
}

public class MyClient {
    public static void main(String[] args) throws IOException, InterruptedException {
        Socket s = SocketFactory.getDefault().createSocket("localhost", MyServer.PORT);
        System.out.println(" connected: " + s.isConnected());
        Thread.sleep(10000);
        System.out.println(" connected: " + s.isConnected());
    }
}

参见内容here...

答案 1 :(得分:0)

  

我的服务器在一个单独的线程ServerThread类上运行,以避免gui冻结。我假设我在服务器类中调用ServerThread.sleep()。另外,我的服务器类没有套接字对象(它在客户端接受连接)

据我所知,您在客户端类中声明了ServerSocket对象,并从那里调用ServerSocket:accept()方法。这种方法旨在“生存”#34;任何中断,比如关闭底层的ServerSocket或在持有套接字的线程上调用interrupt()。

退出ServerSocket:accept()方法的唯一方法是SocketTimeOutException,如here中所述。

所以这是一个例子:

ServerSocket server = new ServerSocket(PORT);
server.setSoTimeOut(MILLISECONDS_TO_TIMEOUT);

while(YOUR_SERVER_SHOULD_RUN){

    try{
        Socket s = server.accept();
        //Do stuff with the new socket
    }catch(SocketTimeOutException ignored){}
}

超时将导致ServerSocket在它结束时抛出异常。您可以捕获此异常并忽略它。目标是检查while循环的条件。