没有看你的代码。通讯系统是跨进程的系统设计,在表现层去try...catch是非常正确的。对于这类问题完全可以在catch中解决,就好像internet网络时通时断一样,你需要在业务逻辑上习惯并且应对,而不需要把这这类一场作为一个编程bug处理。

解决方案 »

  1.   

    http://stackoverflow.com/questions/3389401/c-sharp-an-existing-connection-was-forcibly-closed-by-the-remote-host-socket-pr
      

  2.   

    而不需要把这这类异常作为一个编程bug处理运行时(而非可以测试时)当对方意外断开,那么关闭本地的连接就行了。不需要当作bug处理。
      

  3.   

    2种方法,一种是在捕获异常里面解析异常代码(10054),这种情况就是客户端关闭程序等,你只要进行服务器端的扫尾工作(释放资源等);另外一种复杂点,通过命令包双方来解析,客户端在断开连接前,先发送断开命令包(或者Logout包)。服务器端解析命令包,如果是这种包,就不再调用下一轮的 BeginReceive。。
      

  4.   

    错误在这
          int readbyte = hander.EndReceive(ar);我放在try里面了
    为什么服务器端还崩溃呢?
      

  5.   

    肯定崩啊,你catch 最后不是又 throw 了
      

  6.   

    catch (Exception Err)
                {
                    throw Err;
                }
    这不是吗
      

  7.   

    对啊,你在catch里面 throw Err;
    那么就肯定抛到最外层,如果一直没有其他的catch,被运行时扑捉到,就是程序崩溃了
      

  8.   

    你这是socket tcp/ip 通信,出现这种情况是属正常现象,socket一但连接,客、服务端都有一个端口处于监听模式,一但一方断开,别一方马上做出响应,同样抛出异常。
    需要注意以下几点:
    1、客户端在退出时需要将socket.close();
    2、客、服务端都需要在接收接收套接字代码块中加入try catch 并在finally将socket.close();