java.net.ServerSocket server = new java.net.ServerSocket(port);
java.net.Socket client = null;
while(true){
client = server.accept();
new ThreadDeal(client).start();
}以上是我程序中的代码的一部分,此段代码是放在一个线程的run函数里面的,功能就是创建一个socket服务,监听一个端口,如果接受到请求之后,将调用一个处理线程处理,监听线程继续监听,但现在要求要实现一个服务停止,重启的功能,我不知道这个停止该如何实现,如果直接在另外的线程中调用server.close();的话,server.accept还是处于挂起的状态,如果调用server.close()后,accept能够立马往下执行过去,或者抛出一个异常就好了,不知道各位兄弟姐妹以前有没有实现过这种功能的,帮帮小弟了,急等。
java.net.Socket client = null;
while(true){
client = server.accept();
new ThreadDeal(client).start();
}以上是我程序中的代码的一部分,此段代码是放在一个线程的run函数里面的,功能就是创建一个socket服务,监听一个端口,如果接受到请求之后,将调用一个处理线程处理,监听线程继续监听,但现在要求要实现一个服务停止,重启的功能,我不知道这个停止该如何实现,如果直接在另外的线程中调用server.close();的话,server.accept还是处于挂起的状态,如果调用server.close()后,accept能够立马往下执行过去,或者抛出一个异常就好了,不知道各位兄弟姐妹以前有没有实现过这种功能的,帮帮小弟了,急等。
java.net.Socket client = null;
while(true){ //while(flag){
client = server.accept();
new ThreadDeal(client).start();
}
...............
setFlag(false);
设置一个外部调用线程(有run函数和调用此服务的线程)和此服务控制程序都能共享的内存变量,服务控制程序直接操作这个变量,来控制服务的运行/停止状态
比如该变量为,定义在ServiceControl类中:
public static boolean RUNNING = false;
....
java.net.ServerSocket server = new java.net.ServerSocket(port);
java.net.Socket client = null;
while(ServiceControl.RUNNING ){
client = server.accept();
new ThreadDeal(client).start();
}
看来没什么好办法了?
楼主是不是关闭错了Socket了?