关于Socket Connection reset 问题

JerryZhou_ 2014-08-16 09:37:38
之前接触socket较少、有个问题想咨询大家一下 谢谢、
异常信息:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at obi.youyou.utils.Chat.run(Chat.java:41)


相关代码:
public class Chat extends Thread {
private Socket socket;

public Chat(int count, Socket socket, List<Socket> socketList) {
this.socket = socket;
}

public void run() {
BufferedReader reader = null;
PrintWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String message = "";
SimpleDateFormat df = new SimpleDateFormat("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);
//new Chat(count, socket, socketList).run();
break;
}
// 向所有的客户端发送接收到信息,实现群聊
for (int i = 0; i < SocketTest3Server.socketList.size(); i++) {
writer = new PrintWriter(SocketTest3Server.socketList.get(i).getOutputStream());
String username=message.substring(0,message.indexOf("#$*"));
String messages=message.substring(message.indexOf("#$*")+3,message.length());
messages=SensitiveUtils.doFilter(messages);
writer.println("{\"talk\":{\"username\":\""+username +"\",\"time\":\""+df.format(new Date())+ "\",\"message\":\"" + messages+"\"},\"image\":[]}");
//System.out.println("{\"talk\":{\"username\":\""+username +"\",\"time\":\""+df.format(new Date())+ "\",\"message\":\"" + messages+"\"},\"image\":[]}");
writer.flush();
}
}

} catch (Exception e) {
SocketTest3Server.count--;
System.out.println( SocketTest3Server.count+ " Exception下线 " );
SocketTest3Server.socketList.remove(socket);
//new Chat(SocketTest3Server.count, socket, SocketTest3Server.socketList).run();
e.printStackTrace();
}
}
}
...全文
2315 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JerryZhou_ 2014-08-27
  • 打赏
  • 举报
回复
引用 5 楼 baohuan_love 的回复:
楼主参考一下这篇文章http://www.jb51.net/article/34888.htm,希望解决你的问题!
谢谢、已经参考过了的
JerryZhou_ 2014-08-27
  • 打赏
  • 举报
回复
引用 3 楼 shijing266 的回复:
默认的timeOut是多久?
没设置
  • 打赏
  • 举报
回复
楼主参考一下这篇文章http://www.jb51.net/article/34888.htm,希望解决你的问题!
innight 2014-08-17
  • 打赏
  • 举报
回复
java.net.SocketException: Connection reset 引起这个异常的原因有两个: 一、客户端和服务器端如果一端的Socket被关闭,另一端仍发送数据,发送的第一个数据包引发该异常; 二、客户端和服务器端一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常。 简单来说就是在连接断开后的读和写操作引起的。 你检查一下你的连接。
vnvlyp 2014-08-17
  • 打赏
  • 举报
回复
你要说清楚你程序的基本架构逻辑啊。。你这么一小段难以判断有什么问题,而且哪个是客户端哪个是服务器端也不太清晰 另外Connection Reset一般和网络配置也有很大关系,你要说清楚你的测试环境是怎样的,是同机器测试,不同机器同子网,还是不同子网等等详细情况。
xiaofeifeiloving 2014-08-17
  • 打赏
  • 举报
回复
LZ 你得run()方法呢?貌似你都把它注释了吧,没有线程的start()方法你得群聊该怎么实现,程序该怎么跑。。。。
  • 打赏
  • 举报
回复
默认的timeOut是多久?

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧