zoukankan      html  css  js  c++  java
  • C# udpclient 发送数据断网后自动连接的方法

    需求

    有一个winform程序,

    用来调试路由器和对路由器吞吐量进行测试

    需要后台不断的接收来自udp服务器端的数据,同时要发送数据到服务器端(无线路由器)

    设计时候,通过一个线程,for(;;)死循环来接收数据,

    另一个通过界面按钮发送相关指令(实际情况是

    正常流程,没有任何问题.

    但是

    该流程中,有一个步骤是winform通过http协议上传固件到路由器,

    等待路由器重启完毕,

    正常流程,是没有任何问题.

    但是客户环境,尤其重启期间,测试PC机因为找不到ap接入点,会去介入其它ap,有可能不是同一网段,导致网络环境已经变更.

    此时,udp无法发送,也无法接收.

    发送端可以通过udp重连设置.接收端使用的发送端的udp静态对象,但依然无法接收.

    无论.NET提供的socket还是updclient封装udp,都无法很好的处理这种情况.

    因此,解决思路就是

    通过一个信号量

    ManualResetEvent event_ok = new ManualResetEvent(false);
    ManualResetEvent event_th = new ManualResetEvent(false);

    ok的信号量是用来测试路由器是否通顺,不通过ping的原因是因为非测试路由器也可以ping通.

    每次发送后,等待路由器返回ok的指令,如果没有收到指令,等待信号量超时.

    则认为网络中断

    设置线程同步变量为false

    接收线程当同步变量为false时候,设置th信号量,

    则发送端线程等待线程终止信号量后重新开启接收线程,再次发送即可.

  • 相关阅读:
    多线程 -- H2O 生成、交替打印字符串
    打印零与奇偶数
    h2数据库的使用
    rtx应用和开发
    MongoDB--副本集
    Python 推导式
    Bootstrap组件
    Python logging日志的自动分割
    python watchdog监控文件修改
    Linux流量监控iftop
  • 原文地址:https://www.cnblogs.com/MarsPanda/p/5116242.html
Copyright © 2011-2022 走看看