高性能TCP/IP通信类库设计与实现

2015-07-18 11:49戴雯惠
电脑知识与技术 2015年12期

戴雯惠

摘要:该文设计和封装一个高性能的TCP/IP通信类库组件,完成一个基于socket通信技术的数据交换平台,在设计中考虑到各个信息系统都存在着异构的差异,解决“信息孤岛”问题。为了保障数据的一致性、提高数据共享,设计出通信基础类库,构建完善的数据交换平台。同时通信类库考虑到物联网信息数据采集与控制,实现对物联网平台中的控制节点进行基于TCP/IP的数据交换。

关键词:TCP/IP;异构系统;Socket

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)12-0022-02

Design and Implementation of a High-performance TCP/IP Communications Library

DAI Wen-hui

(Suzhou Institute of Trade & Commerce, Suzhou 215009, China)

Abstract: In this paper, A high-performance TCP/IP communications library by design and packaging, complete a data exchange platform based on socket communication technology,Considering the differences in the design of the heterogeneous system,solve the problem of "information island".in order to ensure the consistency of the data and improve data sharing, design of communication base on class library module, build perfect data exchange platform.At the same time communication libraries considering the Internet of Thing information data acquisition and control, the Internet of things platform to realize the control node for data exchange based on TCP/IP.

Key words: TCP/IP; heterogeneous system; Socket

目前信息孤岛中涉及的系统繁多,为了实现数据共享,各个系统间需要不断地进行数据交换,保障各个系统间数据的一致性,采用计算机网络TCP/IP协议进行远程数据通信。目前物联网技术已经应用到了我们生活的各个方面,物联网信息采集采用TCP/IP协议在上位机上完成和嵌入式设备的信息交互。本文主要研究如何实现高性能通信类库,在此类库基础上完成TCP/IP通信平台构建,实现异构系统整合和物联网平台数据信息交换同时对数据进行实时解析。

1 TCP/IP通信类库关键技术描述

1.1 TCP/IP协议

TCP/IP通讯协议采用了四层的层级模型结构,与OSI七层模型不同,每一层都调用它的下一层所提供的网络任务来完成的需求。TCP 协议提供是一个可靠的、面向连接的协议。

图1显示了 TCP/IP 层级模型结构,应用层(Application)之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。本文主要研究的是通信两端程序建立通信方式、通信连接方式和通信报文发送与接收方式。IP层接收由底层发来的数据包,并把该数据包发送到更高层TCP层,IP层也可以从TCP层接收传递过来的数据包到更低层。IP数据包是不可靠的,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。

1.2 Socket套接字

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。Socket利用客户/服务器(Client/Server)模式解决了进程之间建立通信连接的问题。连接过程包括服务器监听,客户端请求,连接确认。套接字(socket)是通信的基础,是支持TCP/IP协议的网络通信的基本操作单元。本文交换平台采用的是基于TCP/IP 协议的socket 接口。

2 TCP/IP通信类库设计及实现

2.1 总体设计

本文实现服务器端和客户端之间进行TCP/IP数据传输。实现单片机与上位机,服务器与客户端之间的数据双向传输。

在服务器端安装服务器通信组件用于接收和发送数据。客户端安装客户端组件也可以发送数据到服务器端,实现服务器和客户端进行数据互通。Sockets 是以 Client 和 Server 交互通信方式来使用的。Server 放在一台机器中,而把 Client 放在不同的机器上,Client 连接到 Server 交换信息。一个 socket 有一系列典型的事件流。在面向连接的 Client/Server 模型中,Server 端的 socket 总是等待一个 Client 端的请求。

2.2 服务器端设计

服务端首先设置监听号,然后定义服务器端监听类,并且实例化化监听类为对象,然后初始化监听对象,服务器监听这时就可以开始了,此时可以接收来自客户端发送过来的信息,当信息发送完成以后可以关闭服务器端的监听事件。

2.3 客户端设计

客户端首先定义服务器端IP地址和端口号,然后进行客户端进程初始化,初始化完成以后客户端与服务器进程进行连接,连接完成以后客户端发送信息到服务器端进行,信息发送完成以后,客户端可以接收到服务器端回执,同时关闭本次连接。

2.4 TCP/IP报文

TCP/IP报文格式主要包括包括:

1) Source Port,Destination Port源端口号,目标端口号。IP实现了点到点的数据通信;

2) Sequence Number发送序列号。IP实现点到点的通信,这种通信是不可靠的;

3) Acknowledgment Number: 确认序号。对于发送进程这个序号表示下一个tcp报文的起始序号,对于接收进程,表示表示下一个希望接收到报文的序号;

4) Checksum:对报文进行校验。如果校验失败,就丢弃该报文。

3 系统总体实现

3.1 系统总体框架

在面向连接的Client/Server模型中,Server端的socket总是等待一个Client请求。在请求这个过程中,服务端首先建立能被客户端使用的地址,建立地址后,服务端等待客户端请求,当客户端通过socket连接服务进程后,客户端进程与服务端进程之间就可以进行信息交换。Client/Server 是通信程序设计的基本模式。TCP/IP 应用程序都是基于 Client/Server 方式的。客户端/服务器端进行通信如图2所示:

3.2 服务器端实现

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。服务器端主要代码如下:

1)SocketListener 方法 初始化服务数据

输入参数:

Int32 numConnections要同时处理连接的最大数目

Int32 receiveBufferSize要使用的每个 I/O 操作的套接字缓冲区大小

2)Init 方法 服务初始化 初始化缓冲区以杜绝内存碎片

3)Start 方法 开启服务阻塞端口侦听客户端连接

输入参数:

Object data侦听地址{本地地址}

4)Stop 方法 关闭服务,释放服务器监听资源

3.3 客户端实现

客户端程序通过连接服务端的IP地址与端口完成与服务端的数据传输。客户端采用异步模式,在客户端收到数据时调用委托,客户端发送信息以后可以接收到服务端进程返回的回执信息。客户端主要代码如下:

1)SocketClient(string hostName, int port) 初始化客户端

hostname: 服务端地址{IP地址}

Port: 服务器开辟的端口号

2)void Connect() 连接到服务器过程

3) void Disconnect(); 断开与服务器的链接

4) void Dispose(); 销毁客户端

5) Send(string message) 发送过程 message:向服务器发送的内容

6) delegate void GetReceive(string info) 定义接收数据事件

4 结束语

本文利用Visual Studio作为开发工具,考虑实际应用需求,根据指定的通信协议完成了设计和封装一个高性能的TCP/IP通信类库,方便其他应用对此类库组件进行调用。该组件为基于TCP/IP的多线程Socket通信系统设计。并应用于智能水产养殖机器人控制系统上位机模块,实现对机器人控制系统的监测与控制,先后对系统进行了7*24小时的工作测试,工作性能良好,未发现系统异常。目前已经申报软件著作权并交付使用。

参考文献:

[1] 王坤, 高赞. 基于VC + +实现串口通信的方法[J]. 信息化研究, 2010(10): 52-54.

[2] 王春柱. 基于CAN总线的电机控制器监控系统[D]. 吉林: 吉林大学, 2012.

[3] 王彦民. Modbus/TCP协议通信测试[J]. 信息技术, 2012(11): 129-133.

[4] 罗亚非. 基于TCP的Socket多线程通信[J]. 电脑知识与技术, 2009(3): 22-24.

[5] 成卫青, 王雪梅, 豆仁福,等. 三种基本网络传送模式的编程实现与分析[J]. 计算机技术与发展, 2011,21(7): 132-137.