C# 网口demo

bool _testStatus = false;
private void btnOpsStart_Click(object sender, EventArgs e)
{int delay = Convert.ToInt32(txtdelay.Text.Trim());txtView.Clear();txtView.AppendText("******************************************开始烤机********************************" + "\r\n");Task.Factory.StartNew(() =>{Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);_testStatus = true;try{client.Connect(new IPEndPoint(IPAddress.Parse(txtIp.Text), Convert.ToInt32(txtPort.Text)));SetOpsBtnEnable(false);while (_testStatus){//端口1做主循环,其他三个端口做子循环for (int i = 0; i <= 4; i++){for (int j = 0; j <= 4; j++){for (int k = 0; k <= 4; k++){for (int l = 0; l <= 4; l++){if (!_testStatus){return;}string send = $"Configure:WorkChannelAll {i} {j} {k} {l}";ShowMsg(send);client.Send(Encoding.ASCII.GetBytes(send + "\n"));Thread.Sleep(delay);string select = $"Configure:WorkChannelAll?";ShowMsg(select);client.Send(Encoding.ASCII.GetBytes(select + "\n"));//Thread.Sleep(20);string result = string.Empty;string errMsg = string.Empty;ReadResult(client, ref result, ref errMsg);ShowMsg(result);result = result.Replace("\n","");string[] resArr = result.Split(' ');if (i!=Convert.ToInt32(resArr[0])){_testStatus = false;ShowMsgBox($"配置{send}和查询{result}不一致!");}if (j != Convert.ToInt32(resArr[1])){_testStatus = false;ShowMsgBox($"配置{send}和查询{result}不一致!");}if (k != Convert.ToInt32(resArr[2])){_testStatus = false;ShowMsgBox($"配置{send}和查询{result}不一致!");}if (l != Convert.ToInt32(resArr[3])){_testStatus = false;ShowMsgBox($"配置{send}和查询{result}不一致!");}//Thread.Sleep(100);}}}}}}catch (Exception ex){MessageBox.Show(ex.ToString());_testStatus = false;}finally{client.Shutdown(SocketShutdown.Both);}}).ContinueWith((task) =>{SetOpsBtnEnable(true);});
}
/// <summary>
/// 读取网口结果 结果是按/n或/r结尾的
/// </summary>
/// <param name="result"></param>
/// <param name="errMsg"></param>
/// <returns></returns>
public bool ReadResult(Socket client, ref string result, ref string errMsg)
{try{lock (_lockWr){DateTime triggerStart = DateTime.Now;bool pass = true;List<byte> listbyte = new List<byte>();while (pass){DateTime triggerEnd = DateTime.Now;double collecTime = (triggerEnd - triggerStart).TotalMilliseconds;if (collecTime >= 10000){//MessageBox.Show("Read time over-limit");errMsg = "Read time over-limit";return false;}int relength = client.Available;byte[] rebyte = new byte[relength];client.Receive(rebyte);foreach (byte a in rebyte){listbyte.Add(a);}if (listbyte.Count != 0){if (listbyte.Last() == 10 || listbyte.Last() == 13){pass = false;}}//Thread.Sleep(5);}byte[] readbyt1 = new byte[listbyte.Count];for (int a = 0; a < listbyte.Count; a++){readbyt1[a] = listbyte[a];}result = System.Text.ASCIIEncoding.Default.GetString(readbyt1);return true;}}catch (Exception ex){errMsg = ex.ToString();return false;}
}
private void btnOpsStop_Click(object sender, EventArgs e){_testStatus = false;//SetOpsBtnEnable(true);}public void ShowMsg(string msg){this.Invoke(new Action(() =>{if (txtView.Lines.Length > 6000){txtView.Clear();}DateTime date = DateTime.Now;this.txtView.AppendText($@"{date.ToString("yyyy-MM-dd HH:mm:ss")} {msg} {"\r\n"}");}));}public void SetOpsBtnEnable(bool isEnable){this.Invoke(new Action(() =>{btnOpsStart.Enabled = isEnable;btnSameChannelStart.Enabled = isEnable;btnOpsStop.Enabled = !isEnable;}));}public void ShowMsgBox(string ErrMsg){this.Invoke(new Action(() =>{MessageBox.Show(ErrMsg);}));}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89109.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB 安装 ACADO 的完整步骤

✅ MATLAB 安装 ACADO 的完整步骤 &#x1f4e6; 一、准备工作 1. 下载 ACADO Toolkit 官方地址&#xff1a;https://github.com/acado/acado 2. 解压 ACADO 到你指定的路径&#xff0c;例如&#xff1a; D:\user\acado-master建议路径中 不要包含中文或空格。 &#x1f9f…

[逆向工程]160个CrackMe入门实战之Afkayas.1.Exe解析(二)

[逆向工程]160个CrackMe入门实战之Afkayas.1.Exe解析&#xff08;二&#xff09; 一、前言 在逆向工程的学习路径上&#xff0c;CrackMe程序是初学者最好的练手材料。今天我们要分析的是160个CrackMe系列的第二题——Afkayas.1.Exe。这个程序由Afkayas编写&#xff0c;难度为★…

本地电脑安装Dify|内网穿透到公网

1.安装Docker Docker: Accelerated Container Application Development 2.添加 PATH 3.安装Dify https://github.com/langgenius/dify.git 把.env.example文件名改为.env 4.更换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20G…

数据结构自学Day6 栈与队列

1. 栈其实栈与队列仍然属于线性表&#xff08;有n个元素构成的集合&#xff0c;逻辑结构呈现线形&#xff09;线形表&#xff1a;顺序表&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;串&#xff08;字符串&#xff09;栈&#xff08;Stack&#xff09;是一种线性…

Java 异常处理详解:从基础语法到最佳实践,打造健壮的 Java 应用

作为一名 Java 开发工程师&#xff0c;你一定遇到过运行时错误、空指针异常、文件找不到等问题。Java 提供了强大的异常处理机制&#xff0c;帮助我们优雅地捕获和处理这些错误。本文将带你全面掌握&#xff1a;Java 异常体系结构try-catch-finally 的使用throw 与 throws 的区…

Fiddler弱网测试实战指南

Fiddler是一个常用的网络抓包工具&#xff0c;它也可以用来模拟弱网环境进行测试。 在测试时需要用到弱网测试&#xff0c;也就是在信号差、网络慢的情况下进行测试。比如&#xff0c;用户在地铁、电梯、地下车库等场景经常会遇到会话中断、超时等情况&#xff0c;这种就属于弱…

解决Vue页面黑底红字遮罩层报错:Unknown promise rejection reason (webpack-internal)

vue前端页面弹出黑底红色报错遮罩层报错&#xff1a;具体报错信息&#xff1a;Uncaught runtime errors: ERROR Unknown promise rejection reasonat handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58)at eval (webpack-internal…

构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)

文章目录构建 Go 可执行文件镜像典型用途探索轻量级 Docker 基础镜像构建 Go 可执行文件镜像 golang:1.23.0-bullseye 是官方 Go 镜像的一个 “build-stage” 版,用来构建 Go 可执行文件&#xff0c;而不是把它当成最终运行镜像。 dockerhub官方&#xff1a;https://hub.dock…

链表算法之【回文链表】

目录 LeetCode-234题 LeetCode-234题 给定一个单链表的头节点head&#xff0c;判断该链表是否为回文链表&#xff0c;是返回true&#xff0c;否则返回false class Solution {/*** 这里的解题思路为&#xff1a;* (1)、找中间节点* (2)、反转链表* (3)、遍历比较节点值是否相…

Playwright Python 教程:网页自动化

1. 常用工具简介及对比主流网页自动化工具对比工具支持语言浏览器支持特点适用场景PlaywrightPython, JS, .NETChromium, Firefox, WebKit跨浏览器、速度快、API简洁自动化测试、爬虫、网页操作Selenium多语言所有主流浏览器历史悠久、社区大传统自动化测试、兼容性测试Puppete…

动态数组:ArrayList的实现原理

动态数组&#xff1a;ArrayList的实现原理 大家好&#xff01;今天我们来聊聊Java集合框架中一个非常重要的数据结构——ArrayList。就像我们日常生活中使用的伸缩收纳盒一样&#xff0c;ArrayList可以根据需要自动调整大小&#xff0c;既方便又高效。那么它是如何实现这种&quo…

MIPI DSI(五) DBI 和 DPI 格式

关于 DBI 和 DPI 这两种格式的详细协议内容&#xff0c;请参考《MIPI Alliance Standard for Display Bus Interface&#xff08;V2.0&#xff09; .pdf》和《MIPI Alliance Standard for Display Pixel Interface&#xff08;DPI- 2&#xff09; .pdf》这两份文档。首先先了解…

FRP Ubuntu 服务端 + MacOS 客户端配置

一、服务端配置 1、下载frp并解压 # 创建目录并进入 mkdir -p /opt/frp && cd /opt/frp # 下载最新版&#xff08;替换URL为GitHub发布页最新版本&#xff09; wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 解压 …

Video Python(Pyav)解码二

在 PyAV 中&#xff0c;input_container.decode() 和 input_container.demux() 是两种处理视频流数据的不同方法&#xff0c;它们分别适用于不同的场景。下面通过代码示例和对比来详细说明它们的用法和区别。1. input_container.decode()功能直接解码&#xff1a;从容器中读取数…

闲庭信步使用图像验证平台加速FPGA的开发:第十六课——图像五行缓存的FPGA实现

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

头文件与源文件及区别

使用场景上的区别头文件&#xff1a;变量的声明&#xff0c;函数的声明&#xff0c;宏的定义&#xff0c;类的定义等。 源文件&#xff1a;变量的定义。函数的定义实现&#xff0c;类成员函数的定义实现等。这样方便于我们去管理、规划&#xff0c;更重要的是避免了重定义的问题…

图机器学习(4)——图机器学习与嵌入算法

图机器学习&#xff08;4&#xff09;——图机器学习与嵌入算法0. 前言1. 图机器学习1.1 机器学习基本原理1.2 图机器学习的独特优势2. 广义图嵌入问题3. 图嵌入算法分类小结0. 前言 机器学习是人工智能的一个重要分支&#xff0c;它致力于让系统能够从数据中自主学习并持续优…

网络基础10--ACL与包过滤

一、ACL 定义与核心功能ACL&#xff08;访问控制列表&#xff09;是通过规则匹配实现数据包过滤或分类的核心技术&#xff0c;广泛应用于包过滤、NAT、QoS、路由策略等场景。其核心由规则条目组成&#xff0c;每条规则包含匹配条件&#xff08;如源 / 目 IP、端口、协议&#x…

Web安全 - 基于 SM2/SM4 的前后端国产加解密方案详解

文章目录概述一、背景与法规要求二、算法选型三、核心流程四、前端实现要点&#xff08;伪代码&#xff09;五、后端实现要点(伪代码)六、公钥存储策略七、全流程示例图八、总结与最佳实践推荐概述 随着信息安全法规日益严格&#xff0c;如《网络安全法》《数据安全法》和等保…

ACL动态路由实验全攻略:配置与安全实战

实验拓扑图 实验需求 步骤1.按照图示配置IP地址2.按照图示区域划分配置对应的动态路由协议3.在R7上配置dhcp服务器&#xff0c;能够让pc可以获取IP地址4.将所有环回宣告进ospf中&#xff0c;将环回17宣告进rip中&#xff0c;将rip路由引rospf中&#xff0c;ospf路由引.rip中5.要…