李敏+黄巧巧+刘绍丽
摘要:随着嵌入式技术的发展及其在高端产品中的应用,网络通信已成为嵌入式产品开发的必然需求。基于嵌入式Linux操作系统开发高性能的网络通信程序是充分发挥Linux网络特性的一个关键因素。通过对socket原理的研究与分析,设计了嵌入式系统基于数据流的网络通信过程,并给出了详细的实验过程和实验结果。该系统的实现对其他类似系统具有一定的参考和借鉴作用及较好的推广作用。
关键词:套接字;嵌入式Linux;网络通信;TCP/IP协议
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2017)30-0274-02
一、引言
随着数字信息技术和网络技术的高速发展,嵌入式技术已经广泛应用到各个领域、各类产业以及人们的日常生活等各方面,成为引人瞩目的热点。为适应嵌入式和网络应用需求,标准的一种或多种网络通信接口成为嵌入式系统的必备需求,需要TCP/IP协议支持。而socket是TCP/IP网络最为通用的API,计算机可以通过这个端口与任何具有socket接口的设备通信。
二、socket简介
TCP/IP是一组支持网络通信的协议系统,其协议参考模型分為4层:网络接口层、互联网层、传输层和应用层。网络通信中一个非常重要的概念就是套接字(socket),它是介于网络应用层和传输层之间的编程接口,在Linux网络层次模型中的位置如图1所示。套结字利用IP地址与端口号与Internet中的网络进程一一对应,进而实现网络通信。最常使用的socket有两种:(1)数据流式socket(SOCK-STREAM),使用TCP协议,提供面向连接的可靠通信流;(2)数据报式socket(SOCK-DGRAM),使用UDP协议,提供无连接的服务,并且不保证可靠、无差错。本文所使用的是流式套接字。
三、socket通信的设计与实现
1.socket通信过程。网络程序具备Client/Server结构。下面分TCP Client端及TCP Server端为说明TCP网络程序的流程,如图2所示。
Server端启动后,先调用socket()函数建立socket,其次通过bind()函数绑定socket和本地IP地址,然后调用listen()函数做好侦听准备,再调用accept()函数进行接收。Client端建立socket后,通过connect()函数和Server端建立连接。之后即可调用send()和recv()来实现发送和接收。关闭socket通过调用close()来实现。
2.socket通信的实现。本实验PC机上安装的是Redhat 9.0版本的Linux操作系统,嵌入式实验平台采用三星S3C2410微处理器,嵌入式操作系统内核版本为2.4.18。分别编写服务器端应用程序server.c和客户端应用程序client.c,实现网络通信,程序流程图如图3、图4所示。
四、结果分析
设置PC机和目标平台的IP地址分别为:192.168.1.20和192.168.1.22。PC机Linux终端和目标平台分别运行Server和client程序,通过超级终端观察到运行结果如图5所示,可见PC机与目标平台成功建立连接,实现通信,达到了预期目标。
五、结语
研究socket通信对开发具有网络功能的嵌入式产品有着非常重要的作用。本文的实现对于嵌入式产品的网络应用是一个很好的探索,对于同类系统的设计具有实际的参考和推广价值。嵌入式系统与网络的结合,必然使其具有更加广阔的应用空间。
参考文献:
[1]刘峥嵘.嵌入式Linux应用开发详解[M].北京:机械工业出版社,2004:394-433.
[2]吴明辉.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004:187-197.
[3]王进德.嵌入式Linux程序设计与应用案例[M].北京:中国电力出版社,2007:107-125.