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

本文介绍了一种在基于Socket的C/S结构聊天软件中遇到的问题及解决方案。主要讨论了客户端关闭后,服务器端线程未正常终止导致的异常,并提供了解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了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。

完美解决了这个问题~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值