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

这篇具有很好参考价值的文章主要介绍了C# 简易TCP网口调试助手(一) 客户端Client。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

一、使用的环境

开发工具:Visual Studio 2022

用户界面框架:winform

框架版本:.NET Framework 4.8

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

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

2、添加nuget包

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

3、创建界面

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

        groupbox的text改为:连接信息

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

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

      

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

 最终界面如下

c#网络调试助手,tcp/ip,网络,网络协议,c#

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

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

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

代码如下:

using STTech.BytesIO.Tcp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TCP_Client
{
    public partial class Form1 : Form
    {
        //创建TCP客户端对象,STTech.BytesIO.Tcp.TcpClient
        private TcpClient tcpClient;
        public Form1()
        {
            InitializeComponent();
            //tcpClient  new一个实体对象
            tcpClient = new TcpClient();
            //将TcpClient类的属性置入propertyGrid1控件
            propertyGrid1.SelectedObject = tcpClient;
        }

        private void toolStrip_btn_connect_Click(object sender, EventArgs e)
        {//tcp连接
            tcpClient.Connect();
        }

        private void toolStrip_btn_diconnect_Click(object sender, EventArgs e)
        {//tcp断开连接
            tcpClient.Disconnect();
        }
    }
}
2、 TcpClient的“数据接收”、”连接状态“的事件函数处理 和 “发送”按钮的简单代码实现

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

c#网络调试助手,tcp/ip,网络,网络协议,c#

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

新增代码如下:

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

public Form1()
        {
            InitializeComponent();
            //tcpClient  new一个实体对象
            tcpClient = new TcpClient();
            //将TcpClient类的属性置入propertyGrid1控件
            propertyGrid1.SelectedObject = tcpClient;

            //tcp接收数据时触发的事件
            tcpClient.OnDataReceived += TcpClient_OnDataReceived;
            //tcp连接成功时触发的事件
            tcpClient.OnConnectedSuccessfully += TcpClient_OnConnectedSuccessfully;
            //tcp连接断开时触发的事件
            tcpClient.OnDisconnected += TcpClient_OnDisconnected;

        }

        private void TcpClient_OnDisconnected(object sender, STTech.BytesIO.Core.DisconnectedEventArgs e)
        {
            Print($"已断开{e.ReasonCode}");
        }

        private void TcpClient_OnConnectedSuccessfully(object sender, STTech.BytesIO.Core.ConnectedSuccessfullyEventArgs e)
        {
            Print("连接成功");
        }

        private void TcpClient_OnDataReceived(object sender, STTech.BytesIO.Core.DataReceivedEventArgs e)
        {
            Print($"收到数据:{e.Data.EncodeToString("GBK")}");
        }
        private void btn_send_Click(object sender, EventArgs e)
        {//发送数据给服务端,编码格式为"GBK":可发送中文;编码格式默认"UTF-8":发送中文会有问题
            tcpClient.Send(richtbx_send.Text.GetBytes("GBK"));
        }
        private void Print(string msg)
        {
            //线程的修改直接更新到UI主线程是不被允许的,这里通过调用Form的Invoke方法跨线程访问控件
            this.Invoke(new Action(() =>
            {
                richtbx_log.AppendText($"[{DateTime.Now}] {msg}\r\n");
            }));
        }

五、总结

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

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

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

原内容出处: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文章来源地址https://www.toymoban.com/news/detail-849968.html

到了这里,关于C# 简易TCP网口调试助手(一) 客户端Client的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# socket——简单的TCP 客户端 连接通信

    TCP编程的客户端一般步骤是: 1、创建一个socket,用函数socket()。 2、设置socket属性。 3、设置要连接的对方的IP地址和端口等属性。 4、连接服务器,用函数connect()。 5、收发数据,用函数send()和recv(),或者read()和write()。 6、关闭网络连接。 using System; using System.Net; using System.

    2024年02月11日
    浏览(48)
  • C#实现简单TCP服务器和客户端网络编程

    在C#中进行网络编程涉及许多类和命名空间,用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间: System.Net 命名空间: 这个命名空间提供了大部分网络编程所需的类,包括: IPAddress :用于表示IP地址。 IPEndPoint :表示IP地址和端口号的组合。 Socke

    2024年02月11日
    浏览(60)
  • C# 解决TCP Server 关不掉客户端连接的问题

    拷贝了一段 TCP Server的应用代码,第一次运行正常,但是关闭软件或者实现disconnect+close后都无法关闭端口连接。 关闭之后,另外一个客户端还在正常与PC连接。 TCP Server 重新运行,无法接收到客户端的连接。 1、 C#  .net界面程序 2、 .net 4.8.1 3、 System.Net.Sockets 4、 TcpListener 接

    2024年02月15日
    浏览(44)
  • JavaEE & UDP简易翻译服务器 & 网络编程示例2 & TCP回显服务器,回显客户端

    禁止白嫖 T T 点点赞呗 这个翻译器主要是在上一章的回显服务器和回显客户端上进行修改 修改了计算响应的过程, 即process方法 1.1 重写方法 重写方法是Java中的一种重要手段 指在一个类的子类里,对父类的一个方法进行重新定义! 而父类的权限级别要大于等于子类~ 【除了

    2023年04月16日
    浏览(56)
  • C# tcp客户端字符串(图片名称)+ 图片数据打包,发送到服务端;服务端接收到数据后解析数据包

    在C#中,要将字符串和图片数据打包发送到服务端,并在服务端解析这些数据,可以按照以下步骤进行: 客户端打包数据 1、创建一个自定义的数据结构来保存字符串和图片数据。 2、将字符串转换为字节数组。 3、将图片数据转换为字节数组。 4、将字符串和图片数据的字节

    2024年01月20日
    浏览(48)
  • unix网络编程-简易服务器与客户端程序解析

    a -- address f -- file        eg: fputs() -- file put stream fd -- file descriptor h - host(主机) in/inet -- internet        eg: sockaddr_in; inet_aton n -- network(网络字节序)/numeric(数值) p -- protocol(协议)/presentation(表达/呈现形式) s -- socket        eg: sin -- socket internet t -- type,用于指定某种

    2024年01月16日
    浏览(61)
  • TCP通信—客户端与客户端的双向通信

    1.实现客户端与客户端之间的TCP双向通信; 2.服务器记录客户端实名连接,并显示客户端数据记录; 3.客户端退出,服务器和另一客户端显示相应提示; 1.定义数组保存客户端文件描述符; 2.主程序负责接收客户端1的数据发送给客户端2; 3.开展一个线程负责接收到客户端2的

    2024年02月15日
    浏览(41)
  • TCP、UDP客户端

    TCP客户端 #include mystdio.h #define CLI_PORT 6666 #define CLI_IP \\\"192.168.124.210\\\" int main(int argc, const char *argv[])//argv[1] IP  argv[2] 端口号 {     if(argc 3)     {         printf(\\\"请在命令传参端口号和IP地址n\\\");         return -1;     }     //创建流式套接字文件     int cfd = socket(AF_INET,SOCK

    2024年04月25日
    浏览(33)
  • Python Qt学习(十)一个简易的POP3邮件客户端

    公司把126这类的邮箱网站都封了,正好现在无事,加之,算是一个对这俩周学习Qt的一个总结吧。遂写了这么一个简易的通过POP3协议接收126邮件的客户端。 源代码: 截图:

    2024年02月09日
    浏览(42)
  • 【0815作业】搭建select的TCP客户端、poll客户端、tftp文件上传

    IO多路复用(重点!!!) 进程中如果同时需要处理多路输入输出流,在使用单进程单线程的情况下,同时处理多个输入输出请求。 在无法用多进程多线程,可以选择用IO多路复用; 由于不需要创建新的进程和线程,减少系统的资源开销,减少上下文切换的次数。 允许同时

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包