「完整案例」基于Socket开发TCP传输客户端
1 程序界面设计
TCP客户端在上位机开发中应用很广,大多数情况下,上位机软件都是作为一个TCP客户端来与PLC或其他服务器进行通信的。TCP客户端的主要功能就是连接服务器、发送数据、接收数据、断开连接,而不同场合的区别在于发送数据和接收数据的内容不同。
本案例主要是开发一个TCP客户端软件,具备基本的连接功能,并可以发送ASCII、UTF8等不同格式的字符串,也支持发送16进制字符串发送,同时支持文件和JSON格式数据发送。根据以上功能,设计程序界面如下图所示:
2 程序代码设计
接收信息显示:首先编写一个接收信息显示的方法,这里是通过ListView来展示接收信息的。
连接服务器:连接服务器首先实例化Socket对象,然后通过调用Connect的方法来实现,连接成功后,开启一个线程来接收服务器返回的数据,具体代码如下:
断开连接服务器:断开连接服务器直接调用Socket的相关API方法即可。
接收数据:对于数据接收及解析,由于本案例的客户端软件支持多种不同形式数据发送,那么接收必然也支持多种形式,那么对于不同的形式,我们创建了一个枚举类型,这样方便后续扩展,代码如下所示:
因此在数据接收处理时,我们用第一个字节作为类型判断,比如第一个字节如果为0,那么则认为接收的数据为ASCII字符串,也将按照这种形式来进行解析,从第二个字节开始一直到最后,是有效数据部分,所以数据接收及解析方法如下所示:
发送ASCII字符串:对于ASCII字符串,首先要将发送的字符串按照ASCII的编码格式转换成字节数组,然后给这个字节数组前面增加一个字节,字节数值为Message.ASCII,代码如下所示:
发送文件:发送文件之前首先要选择文件,选择文件主要使用OpenFileDialog组件,代码如下:
选择文件之后,发送文件就是将选择的文件内容转换成字节数组,然后给这个字节数组前面增加一个字节,字节数值为Message.File,这里会发送两次,第一次是发送一个字符串,告诉服务器要发送的文件名称,采用的是UTF8编码,代码如下所示:
发送JSON数据:JSON数据主要会涉及到实体对象和JSON文件的转换,这里使用Newtonsoft.Json库编写了一个JSONHelper的方法,然后需要创建了一个实体对象集合,然后通过EntityToJSON方法转换成JSON字符串,再将JSON字符串转换成字节数组,同样,前面需要增加一个字节,字节数值为Message.JSON,代码如下:
3 程序功能调试
由于TCP服务器软件还没有开发,所以这里我们使用网络调试助手来进行功能调试:
- 建立连接与断开连接:
- 各种数据类型发送与接收
回顾往期内容
【西门子】基于PLCSIM-Advanced搭建西门子PLC环境
【WinCC】手把手教你基于C#开发Wincc语音报警插件【附源码】
【云APP】基于C#实现手机APP访问西门子PLC【附源码】
「完整案例」基于Socket开发TCP传输客户端的更多相关文章
- 基于socket的TCP和UDP编程
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- (转)基于socket的TCP和UDP编程
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- 网络编程 基础 基于socket的tcp和udp连接
网络开发的框架 C/S B/S 架构 程序都是bs架构的程序(b指浏览器,s指服务器) c(client)是客户端,s(server)是服务器 bs架构是cs架构的一种 未来的趋势, pc端bs架构, ...
- 基于socket、多线程的客户端服务器端聊天程序
服务器端: using System; using System.Windows.Forms; using System.Net.Sockets; using System.Net;//IPAddre ...
- 基于socket开发网络调试助手
1.什么是Socket? 在计算机领域socket被翻译为套接字,它是计算机之间进行通信的一种方式,通过socket这种约定,一台计算机可以向另外一台计算机发送数据和接收数据. 2.Socket的本质 ...
- 「1.0」一个人开发一个App,小程序从0到1,起航了
古有,秦.齐.楚.赵.魏.韩.燕七国争雄:今有,微信.QQ.百度.支付宝.钉钉.头条.抖音七台争霸.古有,白起.李牧.王翦.孙膑.庞涓.赵奢.廉颇驰骋疆场:今有程序员1,程序员2,程序员3…编写代码. ...
- 「2.0」一个人开发一个App,小程序从0到1,文件剖析
不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚.真心.负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人.说 ...
- 「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之自定义组件(四)
基于Vue和Quasar的前端SPA项目实战之序列号(四) 回顾 通过上一篇文章 基于Vue和Quasar的前端SPA项目实战之布局菜单(三)的介绍,我们已经完成了布局菜单,本文主要介绍序列号功能的实 ...
- 「4.0」一个人开发一个App,小程序从0到1,布局
一提到布局这个词,我总是索索发抖,不是因为天冷,而是因为布局的目标实在太宏大.古代想雄霸天下的王,就喜欢布局这个,布局那个,结果硬生生把自己的国家给布局没了.至于是哪个君王,我倒可以非常认真,非常坦诚 ...
随机推荐
- 痞子衡嵌入式:16MB以上NOR Flash使用不当可能会造成软复位后i.MXRT无法正常启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验. 痞子衡这几天在支持一个i.MXRT1050客户项 ...
- Squeeze-and-Excitation Networks(SENet)详解
一.SENet简介 Squeeze-and-Excitation Networks(SENet)是由自动驾驶公司Momenta在2017年公布的一种全新的图像识别结构,它通过对特征通道间的相关性进行建 ...
- pandas之数值计算与统计
数值计算与统计 对于DataFrame来说,求和.最大.最小.平均等统计方法,默认是按列进行统计,即axis = 0,如果添加参数axis = 1则会按照行进行统计. 如果存在空值,在统计时默认会忽略 ...
- python基础day4_列表list
list列表 li = ['alex',[1,2,3],'hjh','nvshen '] l1= li[0] print(l1) # alex l3= li[0:3]#['alex', [1, 2, ...
- Python os.ttyname() 方法
概述 os.ttyname() 方法用于返回一个字符串,它表示与文件描述符fd 关联的终端设备.如果fd 没有与终端设备关联,则引发一个异常.高佣联盟 www.cgewang.com 语法 ttyna ...
- Python time asctime()方法
描述 Python time asctime() 函数接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07 ...
- HTML <html> xmlns 属性
实例 一个简单的 XHTML 文档,带有最少的必需标签: <html xmlns="http://www.w3.org/1999/xhtml"><head> ...
- PDOStatement::errorCode
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 st ...
- 《Python与量化投资:从基础到实战》PDF高清完整版-PDF|网盘下载附提取码
本书主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘.信号构建.策略构建.回测.策略分析等.本书也是利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,并将重 ...
- 牛客练习赛64 红色的樱花 exgcd 贪心
LINK:The red sakura 暴怒狂樱 血染京都. 这题质量不咋地 这题也没啥营养. 不过还是存在值得学习的地方的. 一个trick n行 m列 第一行与第n行相连 第1列和第m列相连的时候 ...