设计Java c/s的时候,一直提示Connection reset 而且代码是没有错的啊,上网找了很多都是不能解决的
1个回答
2017-12-31
展开全部
学习了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.<init>(ObjectInputStream.java:280)
at cn.edu.xynu.socket.ClientThread.run(ClientThread.java:22)
仔细想想,或许在客户端关闭后 socke是t断开了,可是服务器为客户端已经开启的线程还在执行。
所以要处理一下异常。
在为客户端开启的线程里面定义一个布尔型变量,isOnline=true
在为客户端监听时while(true)修改为while(isOnLine)
如果出现异常,即客户端退出,isOnLine赋值为false。
完美解决了这个问题~~
就是在客户端与服务器通信后,服务器为客户端开启一个线程,使用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.<init>(ObjectInputStream.java:280)
at cn.edu.xynu.socket.ClientThread.run(ClientThread.java:22)
仔细想想,或许在客户端关闭后 socke是t断开了,可是服务器为客户端已经开启的线程还在执行。
所以要处理一下异常。
在为客户端开启的线程里面定义一个布尔型变量,isOnline=true
在为客户端监听时while(true)修改为while(isOnLine)
如果出现异常,即客户端退出,isOnLine赋值为false。
完美解决了这个问题~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询