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信号量,
则发送端线程等待线程终止信号量后重新开启接收线程,再次发送即可.
C# udpclient 发送数据断网后自动连接的方法的更多相关文章
- Delphi使用ADO连接网络数据库,断网后重连问题
原始文章: https://blog.csdn.net/blog_jihq/article/details/11737699# 使用TADOConnection对象连接网络数据库(以MySQL为例), ...
- Navicat for MYSQL 断网时本地连接无法打开,2005错误
Navicat for MYSQL 断网时本地连接无法打开,2005错误 NO1 提示下图: NO2 解决方法: (1)选中本地连接,右键 连接属性 (2) 将 主机名或IP地址 这一栏改为 127. ...
- [Elixir002]节点启动后自动连接其它节点
问题: 如何指定一个节点在启动后自动连接到别的节点上? 这个我们要使用到sys.config,这是erlang的配置文件,这个文件一般都是$ROOT/releases/Vsn下 1. 首先我们要先启动 ...
- ecmall用户登录后自动退出解决方法
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- MySQL集群在断网后再启动报"Unable to start missing node group"问题处理
总所周知,MySQL集群又名ndb cluster,而ndb就是network based database的简称,数据库节点之间依靠网络来通信和保证数据分块间的一致性.今天由于机房交换机损坏,导致集 ...
- 页面加载完后自动执行一个方法的js代码
1.在body中用onload: <body onload="conver()"> 2.在脚本中用window.onload: <script type=&quo ...
- 用js实现在加载完成一个页面后自动执行一个方法
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- css 文本超出容器长度后自动省略的方法!
我们在给用户显示文本内容的时候,往往需要避免文本内容超出容器宽度,防止换行溢出,小弟在网上找了下发现网上的实现仅仅只是实现了用 ...省略了的功能! 而并没有获取光标提示的功能,所有小弟就结合网上的代 ...
- [eclipse]改项目名称后tomcat连接问题解决方法
背景:在我们使用eclipse进行项目开发时,有时候会需要修改项目名称,当改动项目名称后发现tomcat启动访问出现问题,使用新的项目名称不可行,使用旧的项目名称却可以.修改web.xml里面的dis ...
随机推荐
- Jersey搭建Restful服务器 on Ubuntu
自己试着在Ubuntu上搭建一个 1.首先安装eclipse和tomcat sudo apt-get install eclipse tomcat7 -y 2.把tomcat的group assign ...
- 数据结构(12) -- 图的邻接矩阵的DFS和BFS
//////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...
- Java学习日志-01-Hello World
1.安装JDK1.7 2.安装eclipse 3.eclipse上写第一个java程序-hello world 先建工程,再建包,养成良好的习惯,然后新建类 若不先建立包,可能会提示"The ...
- eclipse gradle 自动打包
直接在eclipse项目中建立一个文件,文件名为build.gradle.其实还可以用eclipse再项目上面右击,export->Android->Generate Gradle bui ...
- IOS 异步加载图片
#import <Foundation/Foundation.h> #import "StringUtils.h" @interface ImageManager : ...
- hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse
生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...
- UIActivityViewController 自定义选项
UIActivityViewController 自定义选项 重写 UIActivity 类 建议下载github上源码学习一下 https://github.com/samvermette/SVWe ...
- 去掉StringBuilder或String 最后一个项逗号
一. sb.Length = sb.Length - 1; 二. stringBuilder.Remove(stringBuilder.ToString().LastIndexOf(','), 1); ...
- Apache Spark 架构
1.Driver:运行 Application 的 main() 函数并且创建 SparkContext. 2.Client:用户提交作业的客户端. 3.Worker:集群中任何可以运行 Applic ...
- ubuntu下设置开机自动挂载硬盘
我们在linux中常常用mount命令把硬盘分区或者光盘挂载到文件系统中./etc/fstab就是在开机引导的时候自动挂载到linux的文件系统. 如果给计算机配了一块新磁盘,已经分区,格式化,挂载, ...