关闭客户端令服务器端报错的解决
一、问题描述:
多个客户端能访问一个服务器,能实现群聊。但是,当关闭一个客户端时,服务器会报错。报错为connect reset,后面则显示出错的位置。
二、解决方法:
提示 : 重点关注橘红色和注释部分
// 接收消息的方法
public String receive() {
sb.delete(0, sb.length());
try {
int info = is.read();
//当按钮被按下时则跳出循环(按钮监听器激活后会写入#*两个符号作为协议)
while ( !sb.toString().contains("#*")) {
sb.append((char)info);
info = is.read();
}
sb.delete(sb.length()-2, sb.length());
System.out.println(new String(sb.toString().getBytes(), "gb2312"));
return sb.toString();
} catch (IOException e) {
System.out.println(clientName+" is off-line!");
}
//1、我喜欢用try、catch来捕获异常,而不喜欢在整个方法或类的开头用declare来声明异常。因为用try、catch能做到更精细的发现异常。
2、 如果我没关闭客户端,这个receive()方法只会执行到上面的return sb.toString()这一语句后就跳出了receive()方法,而不会执行后面两句橘红色的语句。此时try、catch也不会发生作用,因为没发生异常。
3、当我关闭了一个客户端的时候,try{}里的代码就发生了异常,从而使try发挥了作用,此时,会忽略try{}里面的内容,直接执行catch{}里面的代码,很明显这会输出“某某用户下线”这样的语句。但receive()方法并没结束,因为上面的return sb.toString()被忽略掉了。因此会继续执行完后面的两个语句后才会结束。
judge=false;//这是关键所在,后面马上就会解释
return clientName+" is off-line!";
}
//显示客户端发来的消息
try {
while(judge){
//judge是我自己定义的一个boolean变量,初始值为true。很明显,这个循环会一直持续下去,直到judge变为false。而judge什么时候会变为false呢,当然是前面提到的receive()方法出现了异常情况(客户端关闭)后,而执行了倒数第二个语句时发生的。原来我没有设置judge这个变量,也没有receive()方法的倒数第二个语句。while循环的条件一直是true(而不是判断条件judge),结果就是当客户端关闭而发生异常后,会一直进行while循环里的内容,从而出现死循环。
content=receive();
jt_receive.append(clientName+" : "+content+"\n");
broadcast();
}
} catch (Exception e) {
// TODO: handle exception
}
socket.close();//关闭当前客户端
//如果不关的话,就会一直存在这个socket,从下面这个语句可判断socket是否已关闭
System.out.println("客户端关闭否:"+socket.isClosed());
Server.list.remove(this);//从队列中移除该客户端
//需记得将该客户端从队列中移除,否则当群发消息,总会遍历到这个已关闭的客户端,从而引发异常
} catch (Exception e) {
e.printStackTrace();
}
相关推荐
例如:在许多客户端weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是weblogic中的server元素的acceptbacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%。...
客户端支持(手机端可通往App store/Android市场下载): Android / iOS / PC 网页版 部署服务器支持: Linux / Windows / 虚拟空间 连接方式: HTTP轮询模式 / 长连接模式 DuckChat 通讯系统(开源IM系统)是一...
关于流量监控,此模块有异常,光查询时没有问题,关闭该功能时会报错。 远程桌面连接为系统自带功能项,具体使用方法请查询百度。 Client有禁止qq登录的功能。此功能耗费系统内存。 此系统的初步设想是将数据库...
客户端输入./client 192.168.23.128(服务器IP地址) 10000(端口号),参数格式不对或少报错,端口号不能小于5000,小于5000报错 2. 客户端支持注册,登陆,退出 注册:向服务器发送用户名和密码,接收服务器返回...
7 服务器端没有指定adapter的端口和ip,仅仅随便给了一个名字,并使用该名字从配置文件中读取信息: 启动服务器时没有问题正常,但是客户端无法连接 原因: 对象适配器无效 错误信息: 抛出异常: Ice::...
服务器的设计思路比较清楚,所以还未见过内存方面报错(数组越界有可能会有,比如部分玩法,目前不稳定的都关闭了暂时没时间修复,大家可以自己动手) 暂时关闭的不稳定玩法:行会争霸,团战(尚未测试),摆摊,...
在AppDelegate中,发请求,询问是否要开通push功能,如果用户点击允许,则接收从服务器端发回的deviceToken(需要真机联网) 配置通过点击了通知打开应用程序后要做的事情,可以在AppDelegate中通过实现...
-修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除...
-修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除...
Server Side ViewState 在服务器端存贮ViewState (ASP.NET 2.0) VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP...
服务器端运行环境推荐 操作系统:Linux 推荐使用Ubuntu,Fedora,CentOS,Gentoo Web服务器:推荐Nginx或Apache2 MYSQL数据库:推荐5.0以上版本 PHP版本:推荐5.3.17以上 EduSoho网络课堂 v2.6.0 更新日志: 新...