资源描述:
收稿日期 2005 - 10 作者简介李国1980 , 男,硕士研究生,研究方向为网络通信;徐永晋1963 , 男,副教授。 网络通信程序设计及在气敏传感器 测试系统中的应用 李 国,徐永晋,王正宏 上海大学机电工程与自动化学院 自动化系,上海200072 摘要介绍基于TCP/ IP协议的网络通信程序设计,着重分析了基于W indows操作系统的计算机和微处理器之间的通信程序 设计及其在气敏传感器自动测试系统中的应用。 关键词TCP/ IP协议; Socket;客户机/服务器模型;网络通信;自动测试系统 中图分类号TP393 文献标识码 B 文章编号 1006 - 23942006 01 - 0050 - 02 Network Commun ication Program Design Based on TCP/ IP and Its Application in Gas2sensitivity Sensor ATS L I Guo, XU Yong2jin, WANG Zheng2hong Department ofAutomation, ShanghaiUniversity, Shanghai 200072, China Abstract Some pri mary concept on net work communication program design based on TCP/ IP was introduced.The communication program design bet ween microprocessor and computer based onWindows operating system and it’s application in gas2sensitivity sensorATSwere analysed. Key words TCP/ IP; Socket; client/servermodel; net work communication; ATS 1 网络编程概述 1. 1 网络通信模型 TCP/ IP是一个包含许多协议的协议族,涉及传输控 制协议、 网际协议、 管理协议等等。设计网络应用程序 时,都要涉及到信息在网络上的输入和输出 I/O ,这就 要解决协议软件和应用程序之间的接口问题。本文阐述 的就是基于Socket的网络输入输出。Socket应用程序接 口API是系统开发环境提供的用于研制计算机网络环 境下用于程序处理网络信息的一系列系统函数。应用程 序靠调用Socket中的API函数实现相互之间的通信,而 Socket又利用下层的协议软件和具体的硬件设备实现实 际的通信工作。它们之间的关系如图1所示。 图1 网络通信模型 1. 2 Socket和W insock简介 套接字Socket是通信的基石,是支持TCP/ IP协 议的网络通信的基本操作单元。可以将套接字看作不 同主机间的进程进行双向通信的端点,它构成了在单 个主机内及整个网络间的编程界面。 利用套接字进行通信,有两种主要的方式流方式 Stream Socket和数据报方式Datagram Socket。流 方式是面向连接的,采用TCP协议。数据报方式是无 连接的,使用UDP协议。 在W indows操作系统下, Socket应用程序开发接 口称为W insock API。应用程序通过调用W insock API 实现相互之间的通信,而W insock利用下层的网络通 信协议软件和操作系统调用实现实际的通信工作 [1 ]。 1. 3 客户机/服务器模型 基于TCP/ IP协议的网络通信主要采用客户机/服 务器模型。在客户机/服务器模型下,客户机为主动方, 即请求方,而服务器为被动方,接受请求方的请求 [2]。 2 气敏传感器自动测试系统简介及编程模型 本文主要讨论的是气敏传感器自动测试系统中的 通信程序设计。在这个系统中,由置于现场的微处理 器下位机通过数据采集装置采集产品测试过程中 各检测点的一系列数据,并将获得的及经过初步处理 的数据上传给管理计算机上位机 , 上位机在收到传 来的数据后及时分析并做出相应的处理,然后发送指 令给下位机,由下位机处理控制现场产品的测试。本 系统基于上述介绍的客户机/服务器模型,上位机为客 户机,下位机为服务器,在传输层上使用TCP进行通 05 仪 表 技 术2006年第1期 信。由于上位机是基于W indows操作系统的,而下位 机是无操作系统的微处理器Rabbit3000,因此,二者要 实现基于TCP/ IP的数据通信,在通信程序的设计上 是有所区别的。上位机在VC 6. 0编程环境下,采 用基于CAsyncSocket类的客户机程序设计;下位机采 用基于Socket的服务器程序设计。 在应用程序中,使用Rabbit3000提供的函数库进 行通信程序设计的一般步骤如下 1声明一个tcpSocket的对象 ; 2 调用sock init进行初始化,该函数的功能是对内部数据结构体 和以太网控制器进行初始化 ; 3 对于服务器程序,调 用tcplisten侦听到来的连接请求; 4调用sock established建立一条连接进行数据传输; 5调用数 据收发函数sockread和sockwrite完成数据传 输 ; 6 调用sockclose释放连接。 其中, tcpSocket对象在静态存储区分配存储空 间,因此,即使在释放连接之后也不能直接销毁tcp Socket对象,只有在主程序运行结束才能由系统自动 销毁。这几个函数在使用过程中要频繁调用一个函数 tcptick ,约为10次/s。当然,高于或者低于这个 数率也可以照常工作。这个函数主要完成两个功能 a驱动后台处理程序及时处理到来的数据; b检查 TCP socket的连接状态 [3 ]。 本系统中,客户机上位机程序采用VC 6. 0 中的CAsyncSocket类的初始化函数Create 、 建立连 接函数Connect、 数据发送函数Send、 数据接收函 数Receive、 关闭连接函数Close 来完成通信程序 的编写。程序的设计步骤和前面介绍的Rabbit3000 的程序设计类似,在此不再赘述。 在本系统中采用基于TCP协议的数据流套接字, 其编程模型如图2所示。 图2 通信程序编程模型 3 程序实现 服务器程序仅列出部分程序段 tcpSocket sock; / /声明一个tcpSocket对象; int bytes1; / /保存接收字节数; int bytes2;/ /保存发送字节数; char buff1[800];/ /定义数据接收缓冲区; char buff2[800];/ /定义数据发送缓冲区; sockinit ;/ /初始化 / /建立连接 void establishlinkvoid { iftcplisten / /如果tcplisten失败, / /则打印“Failed to listen” else while sockestablished break; } } / /如果sockestablished失败, } / /则打印“Failed to establish” / /接收数据 { tcptick / /接收数据; 数据处理部分; } / /发送数据 { 数据处理部分; bytes2 sockwrite / /发送数据; } 客户机程序仅列出部分程序段 其中CXyjSocket继承于CAsyncSocket, CXyjSocket tcpsocket; / /声明一个CXyjSocket对象; void CMaincontroler View ConnectServer { if tcpsocket . Create0, SOCKSTREAM, FDREAD | FDCONNECT |FDWR ITE|FDCLOSE TRUE { int ConnectOK tcpsocket . Connect SOCKADDR3 } / /如果Create和Connect } / /都成功,则将ConnectOK置1 该系统已经建成并投入运行,结果表明系统设计 合理、 功能完善、 可靠性高,圆满完成了预定的技术 指标。 参考文献 [1]陈坚,陈伟,等. Visual C 网络高级编程[M ].北京人民 邮电出版社, 2001. [2] W. Richard Stevens著,范建华,胥光辉,张涛,等译. TCP/ IP 详解,卷一协议[M ].北京机械工业出版社, 2000. [3] Rabbit SemiconductorCorporation. Dynamic C TCP/ IP User’s Manual[ Z]. 2002. 许雪军编发 15 2006年第1期仪 表 技 术
展开阅读全文