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信号量,

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

  • 相关阅读:
    面试常问题
    雷达无线电系列(五)拟合优度检验(matlab)
    LDAP轻量级目录访问协议总结(待完成)
    zipkin数据追踪(待完成)
    git多定制版本管理
    git单修改推送多分支(cherry-pick)
    git工作流及插件使用说明
    基金-股票-期权知识总结(待完成)
    java AESRSA加密解密样例
    分享一个统计文档中不同key的个数的python脚本
  • 原文地址:https://www.cnblogs.com/MarsPanda/p/5116242.html
Copyright © 2011-2022 走看看