0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于VxWorks的C/S模式的编程方法及应用设计

电子设计 来源:现代电子技术 作者:任行,任方洁,王婉 2020-09-19 16:06 次阅读

1 引言

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,使其在嵌入式实时操作系统领域占据一席之地。他以良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。

2 VxWorks的特点

2.1 可靠性

稳定、可靠是VxWorks的一个突出优点,因而他得到了越来越多的用户的认可。

2.2 实时性

实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件做出响应的能力。实时性的强弱是以完成规定功能和做出响应时间的长短来衡量的。

VxWorks有很强的实时性,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,他们造成的延迟很短。VxWorks提供的多任务机制中对任务的控制采用了优先级抢占(Preemptive Priority Scheduling)和轮转调度(Round-Robin Scheduling)机制,也充分保证了可靠的实时性,使同样的硬件配置能满足更强的实时性要求,为应用的开发留下更大的余地。

2.3 可裁减性

VxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。VxWorks内核最小为8kB,即便加上其他必要模块,所占用的空间也很小,且不失其实时、多任务的系统特征。由于他的高度灵活性,用户可以很容易地对这一操作系统进行定制或做适当开发,来满足自己的实际应用需要。

3 C/S模式网络编程

网络是VxWorks系统之间以及与其他系统联系的主要途径。在VxWorks网络结构的最底层,通常使用以太网作为传输媒介;而在传输媒介的上一层,则使用TCP/IP和UDP/IP协议。

VxWorks网络编程中最常见的是C/S模式,在该模式下,服务器端有一个任务(或多个任务)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按照设计的数据交换方法和格式进行数据的传输;而客户端则在需要的时候发出向服务端的连接请求。客户端与服务器端的关系如图1所示。

3.1 C/S模式网络编程原理

网络通信的基石是套接字,一个套接字是通信的一端。VxWorks为用户提供了2种套接字,即流套接字和数据报套接字。流式套接字定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输。数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。

五连接的服务一般都是面向事务处理的,一个请求一个应答就完成了客户端与服务端之间的信息交互。无连接的套接字C/S模式程序的流程如图2所示。

面向连接的服务比无连接的服务处理起来要复杂。面向连接的套接字C/S模式程序的流程如图3所示。

套接字工作过程如下:服务器首先启动,通过调用socket()建立一个套接口,然后调用bind()将该套接口和本地网络地址联系在一起,再调用listen()使套接口做好侦听的准备,并规定他的请求队列的长度,之后就调用accept()来接收连接。客户在建立套接口后就可调用connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用recv()/recvfrom()和send()/sendto()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭套接口。

3.2 编程实例

下面给出一个面向连接的点对点实时通信的工程应用的实例。该实例应用于作者所在的“网络测试分析仪”项目中。他由两部分组成,服务器在VxWorks操作系统下运行,客户机在Windows下运行。

3.2.1 服务端的程序设计

服务端的程序设计在结构上可以使用两种基本模式:循环模式和并发模式。

循环模式 服务端进程在总体上是一个循环,一次处理一个请求。在有很多客户端请求时,请求放人队列,依次等待处理。如果某个请求的处理时间过长,就会导致队列满而不能接受新的请求。

并发模式 服务端进程可以同时处理多个请求,结构上一般采用父进程接受请求,然后调用fork产生子进程,由于进程处理请求。该模式的优点是可以同时处理多个请求,客户端等待时间短。

由于是面向连接的点对点通信,所以实例中采用了循环模式。

(1)建立自己的套接口

sHost=socket(AF_INET,SOCK_STREAM,0)

该函数建立指定通信域、数据类型和协议下的套接口,通信域为AF_INET(惟一支持的格式),数据类型SOCK-STREAM表示建立流式套接口,第3个参数为0,即协议缺省。

(2)绑定本地地址

bind(sHost,(struct sockaddr * )&serverAddr,sizeof(serverAddr))

该函数将服务器地址与sHost绑定在一起,其中,serverAddr是sockaddr_in结构,其成员描述了本地端口号和本地主机地址,经过bind()将服务器进程在网上标识出来。

(3)开始侦听

listen(sHost,2)

该函数表示连接请求队列长度为2,即允许有2个请求,若多于2个请求,则出现错误,给出错误代码WSAECONNREFUSED。

(4)等待接收连接

snew=accept(sHost,(struct sockaddr*)&clientAddr,sizeof(clientAddr)))

该函数阻塞等待请求队列中的请求,一旦有连接请求来,该函数就建立一个和sHost有相同属性的新的套接口。clientAddr也是一个sockaddr_in结构,连接建立时填入请求连接的客户端的地址。

(5)接收、发送数据

recv(snew,recvbuffer,buflen,0)

send(snew,sendbuffer,buflen,0)

recv()和send()分别负责接收和发送数据,recv()从snew(建立连接的套接口)接收数据,放人recvbuffer中,send()则将sendbuffer中数据发送给snew,第4个参数,表示该函数调用方式,通常用于诊断程序或路由选择程序,可选择MSG-DONTROUTE和MSG-OOB,MSG-WAITALL,MSG_DONTWAIT,0表示缺省。

(6)关闭套接口

Close(sHost)

close(snew)

3.2.2 客户端程序设计

所谓客户端程序,指用来向服务端发出服务请求的程序。客户端需要知道服务端的地址、服务所提供的端口号以及服务所使用的传输层协议:TCP还是UDP。

该实例基于面向连接的TCP协议。

(1)调用WSAStartup()函数初始化WindowsSockets DLL

Status = WSAStartup (VersionReqd,lpmyWSAData)

(2)创建一个通信域为Internet、SOCK_STREAM类型、使用TCP协议的套接字

sClient =socket (AF_INET, SOCK_STREAM,IPPROTO_TCP)

(3)设置与套接字sClient相关的属性选项

int sockopt=1

setsockopt (sClient,IPPROTO_TCP,SO_KEEPALIVE,(char *)&sockopt,sizeof(int))

setsockopt()函数用于任意类型、任意状态套接口的设置选项值。在不同协议层上存在选项,但往往是在最高的“套接口”层次上,设置选项影响套接口的操作,诸如操作的阻塞与否、包的选径方式、带外数据的传送等。该实例中打开了SO_KEEPALIVE选项,使得套接字sClient实现在TCP连接情况下允许使用“保持活动”包。

(4)在套接字sClient上向服务器建立一个连接

connect (sClient,(struct sockaddr *)&serverAddr,sizeof(serverAddr))

该函数让系统知道写到sClient的数据将发往何地,而且只有该地址发来的数据才被sClient接收。其中,serverAddr是sockaddr_in结构,其成员描述了服务器的地址族,提供的端口号以及服务器地址,如下,

serverAddr.Sin_family=AF_INET

serverAddr.sin_addr.s_addr=inet_addr(ServerAddress)

serverAddr.sin_Port=htons(Port)

其中:ServerAddress和Port通过参数传人。

(5)接收、发送数据

recv (sClient,recvbuffer,buflen,0)

send (sClient,sendbuffer,buflen,0)

(6)关闭套接口

Close (sClient)

4 结 语

VxWorks操作系统是目前在国内外风行的嵌入式强实时操作系统,而网络编程又是嵌入式实时系统软件的设计核心之一。本文作者介绍了基于TCP的面向连接的C/S模式的编程方法。该方法已经在NA3100网络测试仪中得到了良好而有效的应用。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5065

    文章

    18998

    浏览量

    302649
  • 操作系统
    +关注

    关注

    37

    文章

    6718

    浏览量

    123167
  • 网络通信
    +关注

    关注

    4

    文章

    784

    浏览量

    29746
收藏 人收藏

    评论

    相关推荐

    vxWorksC++的支持问题

    大家好,我最近也在学习vxWorks开发,在测试vxWorksC++的支持的时候,遇到了问题,我就写了一个简单的hello world程序,用的是cout
    发表于 07-13 19:13

    VxWorks操作系统RTP介绍和使用方法

    (VxWorks real time process project)模式编程,这种模式的优点是应用程序相互独立,互不影响,而且增加了内核的稳定性,缺点是由于“内核态”与“用户态”的内
    发表于 12-19 15:45

    VxWorks的特点是什么? CS模式网络编程有什么功能?

    VxWorks的特点是什么?CS模式网络编程有什么功能?
    发表于 04-26 06:01

    VxWorks编程手册-编程指南

    VxWorks编程手册
    发表于 03-25 08:56 46次下载

    VxWorks下基于多任务的网络通讯

    文章讨论了在嵌入式实时操作系统VxWorks下实现网络通讯的方法。开始讨论了VxWorks下的多任务编程接口,接着介绍了使用客户V服务器模式
    发表于 03-25 10:44 28次下载

    VxWorks用户编程手册

    VxWorks用户编程手册,对你的编程很有帮助。
    发表于 03-28 09:53 41次下载

    VxWorks网络编程手册

    VxWorks网络编程手册,很有用的学习资料。
    发表于 03-28 09:53 40次下载

    如何在VxWorks下实现NAT/NAPT的方法

    如何在VxWorks下实现NAT/NAPT的方法
    发表于 03-29 12:25 19次下载

    μC/OS-Ⅱ与VxWORKs介绍及说明

    嵌入式实时操作系统——μC/OS—Ⅱ与VxWORKsC/OS—Ⅱ与VxWORKs介绍及说明
    发表于 03-29 12:26 23次下载

    基于VxWorks的嵌入式系统复合通信模式

    基于VxWorks的嵌入式系统复合通信模式
    发表于 03-29 12:30 12次下载

    一种基于C/S模式的TCP通信程序在Vxworks中设计与实现

    结合嵌入式实时操作系统VxWorks 实现某测控系统的实际应用,以其中的TCP 通 信为例,讨论了在VxWorks 下实现C/S 通信的关键技术。 关键词:
    发表于 06-16 08:37 20次下载

    基于S3C44B0X处理器的VxWorks中断设计

    通过基于立宇泰S3C44B0X 开发板的BSP 移植调试,阐述了VxWorks 的异常中断处理机制,实现了VxWorks 基于S3C44B0X 处理器的中断处理,并以外部中断EINT4
    发表于 09-03 11:25 17次下载

    强干扰背景下S模式解码方法

    S 模式应用于多点定位和ADS-B 系统时,面临高密度的A/C 脉冲干扰,现有解码方法将导致较高的错误率和低置信度数据。该文针对A/C f
    发表于 02-10 10:55 7次下载

    Samsung S3C2440平台上的Vxworks BSP移植

    研究基于S3C2440平台上的Vxworks BSP移植具有重要的意义。本文就BSP的概念、BSP移植过程中重点修改的几个文件、串口和网口驱动以及BSP的调试和仿真做详细的介绍。
    发表于 08-10 11:42 3206次阅读
    Samsung <b class='flag-5'>S3C</b>2440平台上的<b class='flag-5'>Vxworks</b> BSP移植

    MELIPC MI5000系列编程手册(VxWorks篇)

    MELIPC MI5000系列编程手册(VxWorks篇) 产品规格书
    发表于 08-26 10:19 0次下载
    MELIPC MI5000系列<b class='flag-5'>编程</b>手册(<b class='flag-5'>VxWorks</b>篇)