关于多线程环境下,socket异常问题,请高人指点
简单的说,大概是这样的
public class SocketListener extends Thread {
private boolean stop=false;
private ServerSocket serverSocket = new ServerSocket(......);
public void run(){
while(!stop){
Socket socket=serverSocket.accept();//这里会抛出异常
new ClientThread(socket).start;
//ClientThread是一个线程类,处理socket,并包含了socket.close()
}
}
public void quit(){
stop=true;
serverSocket.close();
}
}
public class mainApp{
public static void main(String[] args){
quit=false;
SocketListener s=new SocketListener();
s.start()
while(true){
if(quit){
s.quit();
}
}
}
}
因为实际的代码比较多,所以简单的写了一下.调用quit()方法关闭ServerSocket时,会抛出异常socket closed.
请高人指点
问题点数:50、回复次数:2Top
1 楼zealVampire(白鹤泉)回复于 2005-01-23 21:12:13 得分 25
new ClientThread(socket).start;
//ClientThread是一个线程类,处理socket,并包含了socket.close()
你在quit的时候 是使stop为true
如果这个clientThread还在运行 那么要一直运行close()方法,之后再再while(stop)跳出循环 结束线程
因为close调用了 再次close就是异常了额Top
2 楼gao277(流氓状元)回复于 2005-01-23 21:21:52 得分 25
错误在于:当你的代码在执行完while(!stop)之后,而没有执行accept之前,如果执行了quit,那么可想而知,你的socket将会被关闭,尽管这是stop被置成true,但是已经过了循环检测语句,所以在你执行accept的时候程序将爆出异常socket closed!你可以考虑不需要在quit的时候close.Top




