一、界面设计

在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。
这里使用的软件是:“Axure RP”

二、新建工程与绘制界面

  1. 新建工程:
    使用任意一个Visual studio即可,这里使用Visual studio2017作为开发环境(安装的时候选择.net桌面开发)。新建工程选择“c# winform类型的工程,然后填写工程名字即可完成工程创建”。

  2. 绘制图形界面:
    鼠标单击打开“From1.cs”文件,会出现界面绘制界面。点击软件左侧栏的“工具栏”弹出界面控件列表,选择要绘制的控件拖动到软件绘制界面,并调整控件位置,直到达到设计图所设计的样子。如下图所示:

  3. 添加按钮按下相应函数:
    选中按钮并使用右键点击“属性”,从而打开这个按钮的属性配置窗口,在窗口里可以设置很多属性,切换到事件配置页面(闪电图标)即可编辑与此控件相关的事件。在“事件配置页面”即可给按钮添加点击事件响应函数,如下图所示:

三、用到的库函数说明

.net提供了串口编程函数类,为了避免把逻辑代码和界面代码混合编写。这里给串口相关操作函数做了二次封装(采用类似工厂模型建立)。界面代码只要调用二次封装的类即可完成网络通信。

  1. Udp broadcast
UdpClient { //.net提供的类UdpClient();//新建对象即可使用,没有Open函数bool EnableBroadcast { get; set; }//设置允许广播void Close();//关闭对象相关资源int Send(byte[] dgram, int bytes, IPEndPoint endPoint);//发送udp数据包,参数(数据,目标ip,目标端口)int Available { get; }//是否有数据可读byte[] Receive(ref IPEndPoint remoteEP);//读取数据(阻塞函数),开启一个线程循环调用此函数读取
}
  1. Udp client
UdpClient {//.net提供的类UdpClient();//新建对象即可使用,没有Open函数void Close();//关闭对象相关资源int Send(byte[] dgram, int bytes, IPEndPoint endPoint);//发送udp数据包,参数(数据,目标ip,目标端口)int Available { get; }//是否有数据可读byte[] Receive(ref IPEndPoint remoteEP);//读取数据(阻塞函数),开启一个线程循环调用此函数读取}
  1. Udp server
UdpClient {//.net提供的类UdpClient(int port);//新建对象即可使用,没有Open函数,建立udp服务端需要在构造函数输入“监听端口”void Close();//关闭对象相关资源int Send(byte[] dgram, int bytes, IPEndPoint endPoint);//发送udp数据包,参数(数据,目标ip,目标端口)int Available { get; }//是否有数据可读byte[] Receive(ref IPEndPoint remoteEP);//读取数据(阻塞函数),开启一个线程循环调用此函数读取}
  1. Tcp client
TcpClient {//.net提供的类 void Connect(IPAddress address, int port);//开始向服务端连接,参数:服务器ip,服务器端口NetworkStream GetStream();获取网络通信流,用这个流来最终完成数据收发void Close();///关闭相关资源
}
NetworkStream {//.net提供的类 void Write(byte[] buffer, int offset, int size);//写数据int Read(byte[] buffer, int offset, int size);//收数据void Close();关闭流
}
  1. Tcp server
TcpListener {//.net提供的类 TcpListener(IPEndPoint localEP);//参数传入监听端口void Start();//开始监听IAsyncResult BeginAcceptTcpClient(AsyncCallback callback, object state);//开始监听客户端的连接请求,在毁掉函数中处理连接请求TcpClient EndAcceptTcpClient(IAsyncResult asyncResult);//暂停监听客户端请求,并返回一个刚刚建立的通信的TcpClient, 之后使用TcpClient来完成对这个连接的数据收发。NetworkStream GetStream();//获取网络通信流,用这个流来最终完成数据收发void Close();//关闭相关资源
}
NetworkStream {//.net提供的类 void Write(byte[] buffer, int offset, int size);//写数据int Read(byte[] buffer, int offset, int size);//收数据void Close();//关闭流
}

四、核心编写逻辑代码

  1. 打开与关闭的逻辑
//经过简化的代码
private void ButtonOpen_Click(object sender, EventArgs e){if (netManager.IsOpen()) //IsOPen{ //do closenetManager.Close();}else{ //do openstring des_ip = textBoxNetDesIp.Text;string des_port = textBoxNetDesPort.Text;//net typeint index = comboBoxNetType.SelectedIndex;CommNetType.NetType netType = NetManager.GetNetTypeByIndex(index);int port = int.Parse(des_port);netManager.Open(netType, des_ip, port);}}
  1. 发送数据逻辑
//经过简化的代码private void ButtonSend_Click(object sender, EventArgs e){string send_str = textBoxNetSend.Text;if (checkBoxNetSendHex.Checked){byte[] data = HexFormatUtils.String2HexByte(send_str);netManager.Send(data);}else{Encoding encodingGB2312 = Encoding.GetEncoding("gb2312");Byte[] byte_array = encodingGB2312.GetBytes(send_str.ToCharArray());netManager.Send(byte_array);}}
  1. 接收数据逻辑
 private void OnNetRecvListener(byte[] data, int length, IPEndPoint iped) {if (checkBoxNetRecvHex.Checked){BeginInvoke(new MethodInvoker(delegate{AddRecvMsg(HexFormatUtils.HexByte2String(data));}));}else{BeginInvoke(new MethodInvoker(delegate{Encoding encodingGB2312 = Encoding.GetEncoding("gb2312");Char[] c_data = encodingGB2312.GetChars(data);string str = new String(c_data);AddRecvMsg(str);}));}}

五、获取源代码

点击此链接获取源代码

六、效果图

2.6-使用C#Winform开发Tcp/Udp网络小助手(含步骤和源码)相关推荐

  1. TCP/UDP网络编程调试助手下载

    下载地址:可能需要谷歌:软件干净,挺好用的,如果有更好的,欢迎留言! https://www.waveshare.com/wiki/File:TCP-UDP-Debug.7z 转载于:https:// ...

  2. 用TCP/UDP 网络调试助手(PC版)无法获取网页信息

    以前的网页均是http开头的,是没有加密的,以前用GET就能获取网页的信息,但是现在的基本是https开头的,是加密的,所以现在用以前的方法,只能返回301错误 现在想要用网络调试助手(PC版)来获取 ...

  3. C# TCP/UDP网络通讯调试助手(含源码)

    C# TCP/UDP网络通讯调试助手 1.客户端界面 1.客户端界面 源码下载地址:https://download.csdn.net/download/kingleitao/11927885

  4. PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP

    项目介绍 一款轻量级.高性能.前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城. 完整代 ...

  5. 微信小程序开发初试实例结算小助手

    微信小程序开发初试实例结算小助手 小程序码 创作背景 小程序功能 小程序实现 小程序开发方案(想看源代码,直接看这一项) 本着自己参加过学校组织的微信小程序云开发培训,就抱着尝试的心理去参加今年的高校 ...

  6. TCP/UDP(网络编程)

    TCP/UDP(大作业) 文章目录 TCP/UDP(大作业) Java 网络编程 1.1.描述TCP协议和UDP协议,并说出他们的区别与联系: 基于客户机-服务器模式的应用场景 2.什么是客户机-服务 ...

  7. iptraf:一个实用的TCP/UDP网络监控工具

    iptraf是一个基于ncurses的IP局域网监控器,用来生成包括TCP信息.UDP计数.ICMP和OSPF信息.以太网负载信息.节点状态信息.IP校验和错误等等统计数据. 它基于ncurses的用 ...

  8. 【Java】网络编程——TCP/UDP网络对讲机

    目录 前言 OSI概述 传输层 端口 Socket InetAddress类 UDP协议间的通信 UDP协议相关类 UDP 发送端 UDP 接收端 + 发送端 UDP 聊天 + 全局广播 UDP发送大 ...

  9. Linux TCP/IP网络协议栈:IP协议源码分析

    目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...

最新文章

  1. ux设计_从UX设计人员的角度来看Microsoft Build 2018
  2. 范凯:一个二次创业者的失败
  3. 内核驱动中常见的miscdevice、platform_device、platform_driver
  4. 方位话机同一号码双链路注册实现冗余
  5. 2017/Province_Java_B/4/魔方状态
  6. wordpress去掉category怎么操作让url更简洁友好
  7. Pytorch 加载和保存模型
  8. 【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
  9. 前置++与后置++的要点分析
  10. cacti mysql版本,cacti迁移+升级版本
  11. 关于 intptr_t
  12. Linux下显示IP地理位置信息的工具-nali
  13. 流程管理——免费BPM软件
  14. 脸上经常长青春痘痘的青年应该多吃的食物
  15. 华纳云:香港服务器哪家比较好?
  16. Centos 修改镜像源为阿里云
  17. 10月12日棉花期货投资
  18. CUDA安装出现图形驱动程序安装失败
  19. Linux安装MySQL(源码安装)
  20. 电脑安卓手机模拟器怎么修改IP地址

热门文章

  1. 前端基础 互联网 DNS 服务器 浏览器
  2. android sdk引入 微信分享_android 调用本地微信自定义多图分享朋友圈,可放在share sdk中一起使用...
  3. Unity用GL接口实现画格子
  4. java实现美图秀秀的照片拼接功能(照片数量任意)
  5. 【C++】C++格式化输出/输出格式控制/输出精度控制
  6. 计算机开机慢的原因及解决方法,电脑开机速度慢怎么解决?Win10电脑开机速度变慢的原因及解决方法(2)...
  7. 所有的想不通,都是因为你不懂
  8. linux 剪切合并文件夹,使用PDF-Shuffler拆分和合并PDF文件[Linux] | MOS86
  9. jav中jar包的MANIFEST.MF
  10. kafka消费组查看和删除