论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
4.6 以太网模块
在智能家居中,嵌入式平台充当服务器的角色,相应的PC视频监控端充当客户端的角色。服务器端与客户端之间的通信基于TCP/IP协议。
4.6.1 TCP/IP协议
Internet 上使用的一个关键的底层协议是网际协议,通常称IP协议。通过这个共同遵守的协议,可以使Internet成为可以连接不同层次的网络。IP协议是TCP/IP协议的心脏,是计算机网络层中最重要的协议,IP协议用来帮助数据找到通往目的计算机的路径[8]。IP层接收从网络接口层发送过来的数据包,并把该数据包发送到更高层——TCP层;相反的,IP层也将从TCP层发送过来的数据包发送到接口层——网络层的更低层。而IP数据包是不可靠的,因为IP协议并没有做任何事情来确认数据包的顺序和它的完整性。IP数据包中包含了发送数据包的计算机IP地址(源地址)和接收数据包的计算机IP地址(目标地址)。
TCP协议主要是对IP数据包中被封装好的TCP数据包进行排序和错误检查。TCP数据包包括序号与确认,根据这些信息可以将未经过正确排序的数据包进行排序,损坏的包按要求进行重传。处理完以后将数据发送给更高层的应用程序。应用程序轮流将信息发给TCP层,TCP层将数据发送给IP层,最后通过设备驱动和介质(网线)等发送到目标计算机。如图4-26所示。
图4-26 IP层与以太网驱动器以及TCP层、应用程序层通信
4.6.2 软件实现
所有的TCP通信都发生在两个端点或两个套接字(Socket)之间[8]。每个Socket都有一个端口号与一个IP地址。Socket可以被看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
在智能家居系统的服务端,TCP编程的流程如下:
(1)TCP服务器声明一SOCKET类型的全局变量m_Socket;
(2)通过bind函数绑定本地地址;
(3)用Listen函数进行监听客户端连接
(4)当有客户端请求时,套接字采用Accept函数接受客户端请求
(5)服务端新添加一个单独的套接字与客户端进行通讯。
若用流程图表示,如图4-27所示。
基于以上流程和原理,在VS2005中新添加两个类——CTCPServer_CE和CTCPCustom_CE。其中CTCPServer_CE类用于开启与关闭TCP服务,以及打开监听套接字事件的线程。CTCPCustom_CE用于打开套接字和关闭套接字,以及向客户端发送数据等。
SHAPE \* MERGEFORMAT
图4-27 TCP服务工作流程图
在初始化阶段,调用WSAStartup()函数以在应用程序初始化Windows Socket DLL,调用成功后,应用程序即可采用Windows Socket中的其他有关API函数。在此之后,在程序中建立一个用于监听网络的Socket,并定义其采用的通讯协议——TCP协议。完成这一操作的函数是socket()。它的原型是:
SOCKET PASCAL FAR socket( int af, int type, int protocol )
其中第二个形参用于指定套接字的通信类型,当type为SOCK_STREAM时,为遵从TCP协议的通信,若要遵从UDP协议,应设置为SOCK_DGRAM;在智能家居中,采用前者。
根据流程,接下来要绑定一个IP地址和端口,这个地址和端口是客户端将要连接的目标,通过调用bind()函数可以完成这一操作,以下是bind()函数的原型。
int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int namelen );
其中s为被操作的Socket对象,name是ARM端的IP地址。namelen为IP地址的长度。
在监听网络部分,ARM服务器端建立一个监听队列来接受客户端的连接请求。listen()函数可以完成这一操作。
int PASCAL FAR listen( SOCKET s, int backlog );
s为要操作的Socket;backlog为最大连接数,在系统中设置为8。
在客户端发出连接请求时,ARM客户端调用accept()函数,从而完成完整的连接操作。
在智能家居系统的软件设计中,将监听以太网通过一个线程来实现。
SHAPE \* MERGEFORMAT
图4-28 TCP读线程工作流程
4.7 PC端视频监控模块
该模块采用Delphi7 企业版编写,它是由Borland公司推出的全新的可视化编程,是快速、方便的桌面Windows应用程序开发的工具之一[9]。它综合了Windows的图形界面的许多特性和设计思想,采用了面向对象编程。在Delphi中,提供了包含TCP通信控件在内的许多控件使开发人员能够快速构建和实现应用软件系统。基于这一特点,PC客户端采用Delphi编写。
PC端处于TCP/IP网络中的客户端,它的网络通信依靠Delphi中的TCPClient控件完成。TCPClient控件需要完成的操作是:
1) 打开一个通信信道,连接到智能家居ARM服务器端的特定端口。
2) 向服务器发送服务请求报文,等待并接收应答,如此反复
3) 请求结束后关闭通信通道并终止通讯。
按照以下步骤建立好PC端视频监控程序的界面,如图4-29所示,