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环境