2.6-使用C#Winform开发Tcp/Udp网络小助手(含步骤和源码)
一、界面设计
在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。
这里使用的软件是:“Axure RP”
二、新建工程与绘制界面
新建工程:
使用任意一个Visual studio即可,这里使用Visual studio2017作为开发环境(安装的时候选择.net桌面开发)。新建工程选择“c# winform类型的工程,然后填写工程名字即可完成工程创建”。绘制图形界面:
鼠标单击打开“From1.cs”文件,会出现界面绘制界面。点击软件左侧栏的“工具栏”弹出界面控件列表,选择要绘制的控件拖动到软件绘制界面,并调整控件位置,直到达到设计图所设计的样子。如下图所示:
添加按钮按下相应函数:
选中按钮并使用右键点击“属性”,从而打开这个按钮的属性配置窗口,在窗口里可以设置很多属性,切换到事件配置页面(闪电图标)即可编辑与此控件相关的事件。在“事件配置页面”即可给按钮添加点击事件响应函数,如下图所示:
三、用到的库函数说明
.net提供了串口编程函数类,为了避免把逻辑代码和界面代码混合编写。这里给串口相关操作函数做了二次封装(采用类似工厂模型建立)。界面代码只要调用二次封装的类即可完成网络通信。
- 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);//读取数据(阻塞函数),开启一个线程循环调用此函数读取
}
- 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);//读取数据(阻塞函数),开启一个线程循环调用此函数读取}
- 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);//读取数据(阻塞函数),开启一个线程循环调用此函数读取}
- 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();关闭流
}
- 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();//关闭流
}
四、核心编写逻辑代码
- 打开与关闭的逻辑
//经过简化的代码
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);}}
- 发送数据逻辑
//经过简化的代码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);}}
- 接收数据逻辑
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网络小助手(含步骤和源码)相关推荐
- TCP/UDP网络编程调试助手下载
下载地址:可能需要谷歌:软件干净,挺好用的,如果有更好的,欢迎留言! https://www.waveshare.com/wiki/File:TCP-UDP-Debug.7z 转载于:https:// ...
- 用TCP/UDP 网络调试助手(PC版)无法获取网页信息
以前的网页均是http开头的,是没有加密的,以前用GET就能获取网页的信息,但是现在的基本是https开头的,是加密的,所以现在用以前的方法,只能返回301错误 现在想要用网络调试助手(PC版)来获取 ...
- C# TCP/UDP网络通讯调试助手(含源码)
C# TCP/UDP网络通讯调试助手 1.客户端界面 1.客户端界面 源码下载地址:https://download.csdn.net/download/kingleitao/11927885
- PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP
项目介绍 一款轻量级.高性能.前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城. 完整代 ...
- 微信小程序开发初试实例结算小助手
微信小程序开发初试实例结算小助手 小程序码 创作背景 小程序功能 小程序实现 小程序开发方案(想看源代码,直接看这一项) 本着自己参加过学校组织的微信小程序云开发培训,就抱着尝试的心理去参加今年的高校 ...
- TCP/UDP(网络编程)
TCP/UDP(大作业) 文章目录 TCP/UDP(大作业) Java 网络编程 1.1.描述TCP协议和UDP协议,并说出他们的区别与联系: 基于客户机-服务器模式的应用场景 2.什么是客户机-服务 ...
- iptraf:一个实用的TCP/UDP网络监控工具
iptraf是一个基于ncurses的IP局域网监控器,用来生成包括TCP信息.UDP计数.ICMP和OSPF信息.以太网负载信息.节点状态信息.IP校验和错误等等统计数据. 它基于ncurses的用 ...
- 【Java】网络编程——TCP/UDP网络对讲机
目录 前言 OSI概述 传输层 端口 Socket InetAddress类 UDP协议间的通信 UDP协议相关类 UDP 发送端 UDP 接收端 + 发送端 UDP 聊天 + 全局广播 UDP发送大 ...
- Linux TCP/IP网络协议栈:IP协议源码分析
目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...
最新文章
- ux设计_从UX设计人员的角度来看Microsoft Build 2018
- 范凯:一个二次创业者的失败
- 内核驱动中常见的miscdevice、platform_device、platform_driver
- 方位话机同一号码双链路注册实现冗余
- 2017/Province_Java_B/4/魔方状态
- wordpress去掉category怎么操作让url更简洁友好
- Pytorch 加载和保存模型
- 【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
- 前置++与后置++的要点分析
- cacti mysql版本,cacti迁移+升级版本
- 关于 intptr_t
- Linux下显示IP地理位置信息的工具-nali
- 流程管理——免费BPM软件
- 脸上经常长青春痘痘的青年应该多吃的食物
- 华纳云:香港服务器哪家比较好?
- Centos 修改镜像源为阿里云
- 10月12日棉花期货投资
- CUDA安装出现图形驱动程序安装失败
- Linux安装MySQL(源码安装)
- 电脑安卓手机模拟器怎么修改IP地址
热门文章
- 前端基础 互联网 DNS 服务器 浏览器
- android sdk引入 微信分享_android 调用本地微信自定义多图分享朋友圈,可放在share sdk中一起使用...
- Unity用GL接口实现画格子
- java实现美图秀秀的照片拼接功能(照片数量任意)
- 【C++】C++格式化输出/输出格式控制/输出精度控制
- 计算机开机慢的原因及解决方法,电脑开机速度慢怎么解决?Win10电脑开机速度变慢的原因及解决方法(2)...
- 所有的想不通,都是因为你不懂
- linux 剪切合并文件夹,使用PDF-Shuffler拆分和合并PDF文件[Linux] | MOS86
- jav中jar包的MANIFEST.MF
- kafka消费组查看和删除