manage.py runserver
我认为关闭服务器套接字会断开服务器。我错过了什么吗?有什么想法吗?
答案 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循环的条件。