结束socket接收线程

来源:互联网 发布:枚举数组 编辑:程序博客网 时间:2024/05/02 14:56

在用到socket的时候,一般手机都是客户端,不可避免的用到socket接收线程,接收从服务器发来的一些信息,当想退出时,肯定要结束掉这个接收线程,比如说下面的run函数

public void run() {// TODO Auto-generated method stubwhile(flag){if(!socket.isClosed() && socket.isConnected() && in != null){try {String result = in.readLine();if(result == null || result.length() <= 0){}else{System.out.println(result);}}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return;}}try{Thread.sleep(500);}catch(Exception e){e.printStackTrace();return;}}}

然后想结束时,先将flag置为false,再执行下面的CloseSocket函数

public void CloseSocket(){out.close();try {in.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

这样看起来没错,但退出程序时会出现下面的错误,


错误的代码是这一句

String result = in.readLine();

因为我们已经关闭socket、in了,所以再去读取会出现这个错误,将CloseSocket函数改为下面就不会有这个错误了

public void CloseSocket(){try {socket.shutdownOutput();socket.shutdownInput();}catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}out.close();try {in.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}


原创粉丝点击