A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 猫咪不吃糖 中级黑马   /  2013-10-28 22:29  /  1539 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫咪不吃糖 于 2013-11-1 14:15 编辑
  1. try
  2.                     {
  3.                         length = socketClient.Receive(arrMsgRec);
  4.                     }
  5.                     catch (SocketException ex)
  6.                     {
  7.                         ShowMsg("异常:" + ex.Message+socketClient.RemoteEndPoint.ToString());
  8.                         break;
  9.                     }
  10.                     catch (Exception ex)
  11.                     {
  12.                         ShowMsg("未知异常:" + ex.Message);
  13.                         break;
  14.                     }
复制代码
开启服务器,开启客户端连接。
然后关掉客户端,断开连接。

出现了一个情况,无限循环输出异常消息;ShowMsg("异常:" + ex.Message+socketClient.RemoteEndPoint.ToString());
这是为什么??

系统是WIN7。
用return的话是正常的。而且后面也能继续接受其他客户端连接。

补充下,try catch外层是while(true)的持续监听的循环。
我的问题是,break是跳出到哪层?仅跳出catch语句吗?跳出后接着执行try?

但我看视频也是break,就不会无限循环啊,这是为什么?win7和XP不一样?

1 个回复

倒序浏览
虽然关闭了连接,但是线程还在工作,在不断的连接,但是由于连接不到,所以会一直报错。应该在中断连接的时候,把字典集合中的地址和端口移除掉。把线程也结束掉。

  dict.Remove(socketClient.RemoteEndPoint.ToString());
   dictThread.Remove(socketClient.RemoteEndPoint.ToString());
   lbOnline.Items.Remove(socketClient.RemoteEndPoint.ToString());
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马