当前位置: 首页 > news >正文

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.lryc.cn/news/589587.html

相关文章:

  • Neo4j Python 驱动库完整教程(带输入输出示例)
  • deepseekAI对接大模型的网页PHP源码带管理后台(可实现上传分析文件)
  • Python初学者笔记第十三期 -- (常用内置函数)
  • RestTemplate 实现后端 HTTP 调用详解
  • python 基于 httpx 的流式请求
  • kube-proxy 中 IPVS 与 iptables
  • Vue 2 和 Vue 3 中,组件的封装、二次开发和优化
  • React源码4 三大核心模块之一:Schedule,scheduleUpdateOnFiber函数
  • react - 根据路由生成菜单
  • 使用SQLMAP的文章管理系统CMS的sql注入渗透测试
  • PostgreSQL 大数据量(超过50GB)导出方案
  • DeepSDF论文复现1---数据集生成2---原理解析
  • MIPI DSI(五) DBI 和 DPI 格式
  • 生产问题排查-数据库连接池耗尽
  • bytetrack漏检补齐
  • 2025年夏Datawhale AI夏令营机器学习
  • 数据怎么分层?从ODS、DW、ADS三大层一一拆解!
  • Flink Watermark原理与实战
  • omniparser v2 本地部署及制作docker镜像(20250715)
  • 驱动开发系列61- Vulkan 驱动实现-SPIRV到HW指令的实现过程(2)
  • 定时器更新中断与串口中断
  • Claude 背后金主亚马逊亲自下场,重磅发布 AI 编程工具 Kiro 现已开启免费试用
  • CUDA 环境下 `libcuda.so` 缺失问题解决方案
  • 2-Nodejs运行JS代码
  • 基于按键开源MultiButton框架深入理解代码框架(二)(指针的深入理解与应用)
  • css-css执行的三种方式和css选择器
  • 【leetcode】263.丑数
  • 邮件伪造漏洞
  • 再见吧,Windows自带记事本,这个轻量级文本编辑器太香了
  • Rust基础[part4]_基本类型,所有权