一、界面设计

在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。
这里使用的软件是:“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. 回调函数_实用程序类与函数式编程无关
  2. 微信开放平台开发中遇到的问题
  3. pg 10 wal 归档同步配置
  4. 使用SAP C4C rule editor动态控制UI上某个按钮是否显示 1
  5. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...
  6. BZOJ1911 特别行动队
  7. hdfs java api 权限_HDFS Java API 详解
  8. centos 8+VMware下载安装教程(1)
  9. 如何下载anaconda python3.7_如何安装Anaconda和Python
  10. 点云数据常用处理:python实现
  11. 计算机二级python刷题软件排行榜_计算机二级office刷题软件求推荐?
  12. 线和面的方程区别_平面方程和直线方程的区别?
  13. jasper ireport
  14. 计算机的硬盘配额如何更改,磁盘配额是什么怎么设置
  15. 如何按照滑环的原理来自制简易导电滑环
  16. JavaFX开发桌面,移动端,嵌入式权威指南(二)—— 如何应用JavaFX开发用户界面
  17. 解决Ubuntu14.04不能打正确拼音--无法选择第二个拼音
  18. 微信小程序集成腾讯IM,实现实时音视频通话,1V1聊天
  19. POJ4084: 拓扑排序
  20. 计算机病毒爆发的新闻,从两次勒索病毒爆发聊聊计算机安全重要性

热门文章

  1. Android App专项测试-压力测试篇
  2. C++初学者必练基础编程题【第一期】
  3. jmeter 保存响应到文件
  4. 【Linux】制作U-Boot烧写镜像到SD卡的过程(上篇)
  5. java实现美图秀秀的照片拼接功能(照片数量任意)
  6. 超详细的wireshark笔记(6)-UDP协议
  7. Cannot open url. please check this url is correct
  8. 为什么用python写爬虫_老猿为什么写Python爬虫教程
  9. python小应用之整理手机图片_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
  10. 从头到尾跑起来一个SpringBoot系统