您的位置:首页 > 编程语言 > Java开发

java利用本地Socket关闭正在挂起的ServerSocket.accept()的方法

2014-11-09 20:14 393 查看
利用serverSocket给的借口关闭正在挂起的accept方法总不是太有效,但是开启serverSocket知道自己什么时候需要关闭,在关闭前如果利用一个无用的Socket将accept状态解除,那么就能成功的关闭处在在accept中的serverSocket了,下面是做一个小项目中利用这种思路完成的关闭ServerSocket的代码段

public void runServerLoop(){

while(runswitch){

Socket socket=null;

try {

socket=serverSocket.accept();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if(socket!=null){

if(!runswitch){

if(!socket.isClosed())

try {

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}else{

new Thread(new IPsSendThread(socket,hostIps,listTextArea)).run();

}

}

}

}

public void closeSocket(){

runswitch=false;

Socket socket=null;

if(serverSocket!=null&&!serverSocket.isClosed())

try {

//开启一个无用的Socket,这样就能让ServerSocket从accept状态跳出

socket = new Socket("localhost",this.serverPort);

} catch (UnknownHostException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

if(socket!=null&&!socket.isClosed()){

try {

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public void closeServer(){

if(serverSocket!=null&&!serverSocket.isClosed()){

try {

serverSocket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: