僵息技术与佰息亿■船毽飘皿『同I噩 基于Linux的嵌入式数据采集装置的SOCKET通信 Embedded Data Acquisition Device Communications SOCKET Based on Linux 戴景峰 潘松峰薛兵 DAI J g一 ng PAN song一知ng XUE Bing doi:10.3969/j.issn.1672—9528.201 1.02.14 数据采集监控平台能够对分布在网络上的作为独立节点的数据采集装置进行监控和操作。 在监控平台的软件开发过程中,首先要解决的就是网络通信问题。本文介绍了基于TCP/IP 协议的SOCKET通信,以搭载有Linux操作系统的ARM的数据采集装置为下位机,在其上 编程实现Socket通信的服务器端。以装有Windows操作系统的计算机作为上位机,在其上 编程实现Socket通信的客户端,解决了嵌入式数据采集网络监控平台的通信问题。 网络通信 Socket TCP/IP客户端/服务器 Abstract Data Acquisition and Monitoring platforms distirbuted in the network nodes as an independent data acquisition device for monitoring and operation.Software development platform in the monitoring process, we must first solve the problem is the network communication.This article describes the TCP/IP—protocol SOCKET communications to carry with ARM—Linux operating system,data acquisition device for the next crew, Socket programming in its communication on the server side.To acomputer with Windows operating system as .the host computer,Socket programming in its communication on the client,to solve the embedded data acquisi— tion network monitoring platform communications. Keywords Network communicati0n Socket TCP/IP Client/Ser er l弓l言 2・ 持多种套接字类型,只要有以下三 随着信息化的不断发展,在工业自动化、电力设 种: 备、通信管理、智能终端、智能小区等领域,对数据采 (1)流式套接字(SOCKET—STREAM):它提供 集的实时性、可靠性的要求也不断地提高。以往传 可靠的通信流,使用面向连接的TCP协议,从而保 统的单片机加采集卡的数据采集装置已经不能满足 证数据传输的正确性和顺序性。 人们使用的要求。嵌入式数据采集装置是在传统数 (2)数据报套接字(SOCKET—DGRAM):UDP协 据采集装置的基础上发展起来的具有以太网通信功 议使用此类接口,它是无连接的服务,以独立的数据 能的新型数据采集装置。它把TCP/IP协议作为一 报进行网络传输。它是无序的,并且不保证可靠,无 种嵌入式应用到采集装置中,在网络中充当着独立 差错,它定义一种面向无连接的服务。 结点的角色,可以通过以太网接口与外界进行数据 (3)原始套接字(SOCK—RAW):它允许直接访 交换,实现工业远程数据采集及控制。 问底层协议,功能强大但使用较为不便,主要用于一 本文提出了基于ARM的数据采集装置以TCP/ 些协议的开发, IP协议为载体,在实现对数据的高速采集的同时, 2.2 Socket的编程原理 并能够将数据可靠的、实时的上传给上位机。 本文将采用面向连接的流式套接字,流式套接 2 Socket技术 字采用的是客户/服务器模式。因此编程分为服务 器端和客户端两部分。服务器和客户端的进程交互 socket通常也称作套接字,位于网络中的主机 如图1所示。 可以通过连接的套接字提供的接口进行数据传输。 编程流程如下:服务器首先调用socket()建立 一个Socket,返回该Socket的描述符;配置Socket的 青岛大学自动化工程学院控制理认与控制工程系266071 端口和IP地址,并使用bind()将该套接字和IP联 国暖蠢 ■佰息技术与僵息亿 系在一起;再调用listen()建立监听函数,检测是否 有客户端向服务器发送请求,若有则接受该请求,将 其放到接受队列中;用accept()接受连接;并向客户 端发送确认连接信息。 服务器端 图1 面向连接的SOCKET通信示意 客户端首先调用socket()建立Socket,返回该 Socket的描述符;配置Socket端口和IP地址,并使 用bind()将该套接字和IP联系在一起;调用con— nect()和服务器连接,并接收服务器发挥的确认连 接信息。 客户端与服务器调用send()和recv()来发送 和接受数据。待数据传输结束,双方调用closesock— et()关闭Socket。 、 3多线程Socket通信 3.1多线程并发的优点 同一进程可以包括多个线程,这些线程共享相 同的内存空间,而进程都有各自的独立的内存空间, 进程之间通信需要专门的机制,这无疑增加了内核 的开销,降低了系统性能。线程带来的开销很小,内 核无需单独复制进程的内存空间或文件描述符等, 这就大量地节省了CPU时间,使得创建线程比创建 进程的速度快很多。另外,多线程程序作为一种多 任务、并发的工作方式,还可以提高应用程序响应时 间,使多CPU系统更加有效以及改善程序结构等。 3.2多线程并发服务器算法 Socket通信中应用多线程技术,可以更容易地 图 Q 垒簋 塑 构造并发服务器,主线程一直循环运行,负责监听和 接受客户连接请求,每当有新的连接时,主线程并不 去直接处理而是将创建一个从线程负责处理连接, 直到与客户通信结束,从线程终止。基于多线程的 并发服务器更适合于大量线程间通信的情况,更有 利于设计强大和复杂的服务器。其服务器端算法如 图2所示。 l主 l线 l程 J ...........:‘‘... ....一 l建立TcP套接l 绑定套接字 的IP和端口 _--_--___--●●---_-_--__ . . 。. . l; 一 监听 调用 accept()接 予线程 受客户端请 建立连接与 求,产生f 客户端交互 线程,处理 客户端请求 处理客户端 请求并关闭 连接 —]一 L一 退出 图2多线程并发服务器算法 4 Socket编程实现服务器与客户端之间通信的程 序实现 本系统的服务器端是以三星公司的ARM处理 器¥3C2440开发板为核心的嵌入式数据采集装置, 客户端装有Windows操作系统的PC。 在数据采集装置软件的主线程中,用一个Sock— et套接字绑定一个固定端口,负责监听客户端的 Socket请求。每启动一个客户端程序,客户端发送 来一个Socket连接请求时,开发板就开启一个新线 程,并在其中穿件一个新的Socket和该客户端的 Socket进行通信,知道客户端程序关闭连接,结束该 线程。数据采集装置主线程中的Socket在退出应 用程序时关闭。 部分算法程序如下: 僵患技术与僵息他■E番强;ji】啊嚣 socket(AF—INET,SOCK—STREAM,0);//g0建 套接字 bzero(&client—addr,sizeof(struct sockaddr— in)); 本文的服务器端的通信程序已在Linux操作系 统测试和验证,IP为192.168.6.35的客户端发送 数据Hello,IP为192.168.6.23的客户端发送数据 World,而服务器端接收到的数据结果如下: //绑定IP和端口 ly=AFINET; clientaddr.sinfami———clientaddr.sin—_—port=htons(MY—PORT); wclientaddr.sinaddr.S—addr=htonl(INADDR— ANY); bind(1isten—fd,(struct sockaddr¥)&client—ad- dr,sizeof(client—addr)); listen(1isten_fd,5);//监听 while(1) { i=0; accept—fd=accept(1isten—fd,NULL, NULL); pthread—create(&rid[i],null,(void,I:) fun,nul1);//g ̄建子线程 i++: pthread._join(tid[i],nul1); close(1isten fd); close(accept_fd); } } void fun(void)//子线程程序 { char buffer[1024]; nbytes=read(accept_fd,buffer,1024); buffer[nbytes]=‘; prinff(“Server received%S ”,buffer); exit(0); } 图3客户端程序在Linux上运行的结果 5结束语 本文主要介绍了Socket通信原理,根据面向连 接的流式套接字的C/S模式,在基于ARM的嵌入 式数据采集装置平台下构建了Socket服务器端程 序,在上位机搭建了一个Socket客户端为核心的监 控平台,实现了嵌入式数据采集装置与上位机监控 软件的通信。 参考文献: [1] 高小明.基于PXA270嵌入式系统的Socket通 信设计[J].计算机与信息技术,2009,04— 009 [2] 周炎涛,李立明.TCP/IP协议下网络编程技术 的实现[J].航空计算技术,2002,32—3:122 —125 [3] 华清远见嵌入式培训中心.嵌入式Linux C语 言应用程序设计[M].北京:人民邮电出版 社.2007 [4]孙琼.嵌入式Linux应用程序开发详解[M]. 北京:人民邮电出版社,2006 [5] 韦东山.嵌入式Linux应用开发完全手册 [M].北京:人民邮电出版社,2006. [作者简介] 戴景峰,青岛大学自动化工程学 院控制理论与控制工程系。 (收稿日期:2011—01—11)