C# 网口demo

csharp 复制代码
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);
    });
}
csharp 复制代码
/// <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;
    }
}
csharp 复制代码
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);
     }));
 }
相关推荐
玩代码3 分钟前
备忘录设计模式
java·开发语言·设计模式·备忘录设计模式
技术猿188702783511 小时前
实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
开发语言·网络·python·深度学习·测试工具
放飞自我的Coder1 小时前
【colab 使用uv创建一个新的python版本运行】
开发语言·python·uv
艾莉丝努力练剑1 小时前
【数据结构与算法】数据结构初阶:详解顺序表和链表(四)——单链表(下)
c语言·开发语言·数据结构·学习·算法·链表
zyhomepage1 小时前
科技的成就(六十九)
开发语言·网络·人工智能·科技·内容运营
珊瑚里的鱼2 小时前
第十三讲 | map和set的使用
开发语言·c++·笔记·visualstudio·visual studio
逑之2 小时前
C++笔记1:命名空间,缺省参数,引用等
开发语言·c++·笔记
songroom2 小时前
【转】Rust: PhantomData,#may_dangle和Drop Check 真真假假
开发语言·后端·rust
RealmElysia2 小时前
java反射
java·开发语言
唐青枫3 小时前
C#.NET BackgroundService 详解
c#·.net