关于客户端断开连接后服务器抛出异常Connection reset

学习了socket  ,在做一个类似qq的c/s结构的聊天软件。发现了一个问题

就是在客户端与服务器通信后,服务器为客户端开启一个线程,使用while(true)循环时刻监听是否有通信。

在界面开启时没有任何异常,可是当界面关闭 就一直抛出异常了。

开启线程代码如下:


异常内容如下:


java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.(ObjectInputStream.java:280)
at cn.edu.xynu.socket.ClientThread.run(ClientThread.java:22)

仔细想想,或许在客户端关闭后  socke是t断开了,可是服务器为客户端已经开启的线程还在执行。

所以要处理一下异常。

在为客户端开启的线程里面定义一个布尔型变量,isOnline=true

在为客户端监听时while(true)修改为while(isOnLine)

如果出现异常,即客户端退出,isOnLine赋值为false。

完美解决了这个问题~~

你可能感兴趣的:(【java】,【socket】,java)