如果网络断了,但是在允许的时间范围内网络又连接好了的话,就不报异常,让程序继续运行;如果超出了允许的时间范围(比如30秒后网络还是断的),这时才抛出异常。GOOGLE上有个“Keep-Alive处理Socket网络异常断开的方法”,没看明白,不知道是不是也处理这个问题的,请高人指点

解决方案 »

  1.   

    Exception 时判断是否为断网,如果是断网就让线程sleep 30秒后继续运行,并重新执行这个引起Exception的事务或业务逻辑。需要注意的是注意事务或业务逻辑的完整性。
      

  2.   

    catch (Exception exm)
                {
                    string caption = "网络出现异常";
                    MessageBoxButtons buttons = MessageBoxButtons.OK;
                    MessageBoxIcon icon = MessageBoxIcon.Warning;
                    if (exm.Message == "值不能为空。\r\n参数名: hostname")
                    {
                        MessageBox.Show("请设置IP地址和网络端口号!", caption, buttons, icon);
                    }
                    else if (exm.Message.IndexOf("由于目标机器积极拒绝,无法连接。") > -1)
                    {                    
                        MessageBox.Show("目前采集柜网卡正被其他计算机工作站占用!", caption, buttons, icon);
                    }
                    else if (exm.Message.IndexOf("由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。") > -1)
                    {                    
                        MessageBox.Show("您所输入的IP地址或者端口号所指定的采集柜网卡不存在!", caption, buttons, icon);
                    }
                    else
                    {
                        MessageBox.Show(exm.Message, caption, buttons, icon);
                    }
                }没有吃掉啊