当前位置:   article > 正文

C# 简易TCP网口调试助手(一) 客户端Client_c# tcp client

c# tcp client

  最近的上位机开发工作中开始频繁涉及到网口、串口的通讯,网上找了各种资料和帖子都没怎么找到好用的开源代码或者工具。目前找到几个好一点的方式来实现的网口和串口通讯工具包,先写个好用的TCP的negut包记录下来,将使用的步骤写下来做个记录。

  本博客主要用来记录自己学到的东西,用于以后回来查看和使用。也会标注来源,各位若是对某项内容感兴趣,可去来源处更加细致的学习

    实现效果如下,右侧为制作的测试程序:能够收发数据,检测连接状态。并且收发5000多行数据量的内容都不会出现数据错误的现象,速度也很快,能够满足个人工作需求。重点是如何使用”“STTech.ByteslO.Tcp”这个nuget包。

一、使用的环境

开发工具:Visual Studio 2022

用户界面框架:winform

框架版本:.NET Framework 4.8

二、项目搭建
1、新建winform项目

  选择 “Windows窗体应用(NET Framework)” 项目

  输入项目名称:TCP_Client,使用框架为.NET Framework 4.8

2、添加nuget包

  右键项目,准备添加TCP的nuget包

  使用的nuget包为:STTech.ByteslO.Tcp,版本:2.14.6-alpha0225(也可选择最新版本下载,不必强求版本一致),在nuget管理界面的浏览页面下搜索bytesio,找到nuget包。点击安装并确定

3、创建界面

  放入容器控件groupbox、工具条控件ToolStrip和显示属性的PropertyGrid控件

        groupbox的text改为:连接信息

        ToolStrip增加两个text类型的文本按钮:连接、断开

        PropertyGrid的dock设为:Fill,并将控件置于顶层

      

  再加两个groupbox容器,放置右侧,内部各塞一个  RichTextBox

 最终界面如下

四、主要代码编写
 1、TcpClient的创建和“连接”、“断开”按钮的简单代码实现

能够实现参数的设定简单的连接,效果如下图一

图一:左侧网口调试工具(模拟服务端) ,右侧测试程序(模拟客户端)

代码如下:

  1. using STTech.BytesIO.Tcp;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace TCP_Client
  12. {
  13. public partial class Form1 : Form
  14. {
  15. //创建TCP客户端对象,STTech.BytesIO.Tcp.TcpClient
  16. private TcpClient tcpClient;
  17. public Form1()
  18. {
  19. InitializeComponent();
  20. //tcpClient new一个实体对象
  21. tcpClient = new TcpClient();
  22. //将TcpClient类的属性置入propertyGrid1控件
  23. propertyGrid1.SelectedObject = tcpClient;
  24. }
  25. private void toolStrip_btn_connect_Click(object sender, EventArgs e)
  26. {//tcp连接
  27. tcpClient.Connect();
  28. }
  29. private void toolStrip_btn_diconnect_Click(object sender, EventArgs e)
  30. {//tcp断开连接
  31. tcpClient.Disconnect();
  32. }
  33. }
  34. }
2、 TcpClient的“数据接收”、”连接状态“的事件函数处理 和 “发送”按钮的简单代码实现

  能够做到发送数据、接收数据检查连接状态,效果如下图

图二:左侧网模拟服务端收发数据 ,右侧测试程序收发数据 (模拟客户端)

新增代码如下:

其中跨UI线程的解决方式和原出处不同,原出处是通过关闭跨UI线程报错来解决问题,这里是调用Form的Invoke方法跨线程访问控件

  1. public Form1()
  2. {
  3. InitializeComponent();
  4. //tcpClient new一个实体对象
  5. tcpClient = new TcpClient();
  6. //将TcpClient类的属性置入propertyGrid1控件
  7. propertyGrid1.SelectedObject = tcpClient;
  8. //tcp接收数据时触发的事件
  9. tcpClient.OnDataReceived += TcpClient_OnDataReceived;
  10. //tcp连接成功时触发的事件
  11. tcpClient.OnConnectedSuccessfully += TcpClient_OnConnectedSuccessfully;
  12. //tcp连接断开时触发的事件
  13. tcpClient.OnDisconnected += TcpClient_OnDisconnected;
  14. }
  15. private void TcpClient_OnDisconnected(object sender, STTech.BytesIO.Core.DisconnectedEventArgs e)
  16. {
  17. Print($"已断开{e.ReasonCode}");
  18. }
  19. private void TcpClient_OnConnectedSuccessfully(object sender, STTech.BytesIO.Core.ConnectedSuccessfullyEventArgs e)
  20. {
  21. Print("连接成功");
  22. }
  23. private void TcpClient_OnDataReceived(object sender, STTech.BytesIO.Core.DataReceivedEventArgs e)
  24. {
  25. Print($"收到数据:{e.Data.EncodeToString("GBK")}");
  26. }
  27. private void btn_send_Click(object sender, EventArgs e)
  28. {//发送数据给服务端,编码格式为"GBK":可发送中文;编码格式默认"UTF-8":发送中文会有问题
  29. tcpClient.Send(richtbx_send.Text.GetBytes("GBK"));
  30. }
  31. private void Print(string msg)
  32. {
  33. //线程的修改直接更新到UI主线程是不被允许的,这里通过调用Form的Invoke方法跨线程访问控件
  34. this.Invoke(new Action(() =>
  35. {
  36. richtbx_log.AppendText($"[{DateTime.Now}] {msg}\r\n");
  37. }));
  38. }

五、总结

  1、STTech.ByteslO.Tcp这个nuget包目前使用确实很好,上手快、较大数据量收发无错误

  2、winform跨UI线程调用界面控件可以使用Invoke来实现

  1. this.Invoke(new Action(() =>
  2. {
  3. //调用控件做事
  4. }));

原内容出处:https://www.bilibili.com/video/BV1jB4y1R7fx/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=320122341f21b9845ec2048525e53a70注:单身狗注意,原视频狗粮很多,学着学着忽然就被狗粮拍脸上了(T⌓T)

源代码(本文中自己试验写的程序):ShareSpace: 分享个人使用的试验和测试好的代码和工具 - Gitee.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/892441
推荐阅读
相关标签
  

闽ICP备14008679号