问题描述
之前接触socket较少、有个问题想咨询大家一下谢谢、异常信息:java.net.SocketException:Connectionresetatjava.net.SocketInputStream.read(SocketInputStream.java:168)atsun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)atsun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)atsun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)atjava.io.InputStreamReader.read(InputStreamReader.java:167)atjava.io.BufferedReader.fill(BufferedReader.java:136)atjava.io.BufferedReader.readLine(BufferedReader.java:299)atjava.io.BufferedReader.readLine(BufferedReader.java:362)atobi.youyou.utils.Chat.run(Chat.java:41)相关代码:publicclassChatextendsThread{privateSocketsocket;publicChat(intcount,Socketsocket,List<Socket>socketList){this.socket=socket;}publicvoidrun(){BufferedReaderreader=null;PrintWriterwriter=null;try{reader=newBufferedReader(newInputStreamReader(socket.getInputStream()));Stringmessage="";SimpleDateFormatdf=newSimpleDateFormat("HH:mm:ss");//socket.setSoTimeout(10000);while(true){message=reader.readLine();========此处为41行=======//接收到客户端的bye信息,客户端即将退出,并将bye写入到该客户端if(null==message){SocketTest3Server.count--;System.out.println(SocketTest3Server.count+"null下线");SocketTest3Server.socketList.remove(socket);//newChat(count,socket,socketList).run();break;}//向所有的客户端发送接收到信息,实现群聊for(inti=0;i<SocketTest3Server.socketList.size();i++){writer=newPrintWriter(SocketTest3Server.socketList.get(i).getOutputStream());Stringusername=message.substring(0,message.indexOf("#$*"));Stringmessages=message.substring(message.indexOf("#$*")+3,message.length());messages=SensitiveUtils.doFilter(messages);writer.println("{"talk":{"username":""+username+"","time":""+df.format(newDate())+"","message":""+messages+""},"image":[]}");//System.out.println("{"talk":{"username":""+username+"","time":""+df.format(newDate())+"","message":""+messages+""},"image":[]}");writer.flush();}}}catch(Exceptione){SocketTest3Server.count--;System.out.println(SocketTest3Server.count+"Exception下线");SocketTest3Server.socketList.remove(socket);//newChat(SocketTest3Server.count,socket,SocketTest3Server.socketList).run();e.printStackTrace();}}}
解决方案
解决方案二:
LZ你得run()方法呢?貌似你都把它注释了吧,没有线程的start()方法你得群聊该怎么实现,程序该怎么跑。。。。
解决方案三:
java.net.SocketException:Connectionreset引起这个异常的原因有两个:一、客户端和服务器端如果一端的Socket被关闭,另一端仍发送数据,发送的第一个数据包引发该异常;二、客户端和服务器端一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常。简单来说就是在连接断开后的读和写操作引起的。你检查一下你的连接。
解决方案四:
默认的timeOut是多久?
解决方案五:
你要说清楚你程序的基本架构逻辑啊。。你这么一小段难以判断有什么问题,而且哪个是客户端哪个是服务器端也不太清晰另外ConnectionReset一般和网络配置也有很大关系,你要说清楚你的测试环境是怎样的,是同机器测试,不同机器同子网,还是不同子网等等详细情况。
解决方案六:
楼主参考一下这篇文章,希望解决你的问题!
解决方案七:
引用3楼shijing266的回复:
默认的timeOut是多久?
没设置
解决方案八:
引用5楼baohuan_love的回复:
楼主参考一下这篇文章,希望解决你的问题!
谢谢、已经参考过了的