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
英文地址,請注明出處:http://en.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.要…