基于SOCKET通信在DOS下的实现
作者:周 芸 路青起
来源:《现代电子技术》2008年第16
        要:嵌入式PC安装一般是嵌入到其他设备或系统中,所以体积、功耗、抗震性等方面的特殊要求使其硬件环境与标准PC有所区别:其内存较小、无硬盘、甚至无显示功能或由远端的控制终端进行显示,因此视窗操作系统的强大功能发挥不出来,则DOS以其内核小、操作简单、实时性强就在嵌入式PC领域中占有重要地位。然而,DOS操作系统缺乏类似WinsockAPI,所以在该系统下设计基于TCP/IP协议的应用程序时难度较大,结合实例阐述基于DOS下的嵌入式系统中实现SOCKET通信的一种具体方法和过程。
        关键词:嵌入式系统;DOSTCP/IPSOCKET
        中图分类号:TP311 文献标识码:B 文章编号:1004373X(2008)1609202
        Realization of Embedded PC Based on SOCKET Communication in DOS
        ZHOU Yun, LU Qingqi
        (Electronic Information Engineering Institute,Xi′an Industrial University,Xi′an,710032,China)
        AbstractThe embedded PC installment is generally inserted to other equipment or the system,therefore,volume,power loss,antiknocking property special requests cause its hardware environment and standard PC have the differences:its memory is small,does not have the hard disk,even does not have the demonstration function or carries on the demonstration by the farend control terminal.Windows operating system's formidable function cannot display,then DOS is small by its essence,the simplicity of operator,timeliness hold the important position in the embedded PC domain.However,the DOS operating system lacks similar Winsock API,designs under this system based on TCP/IP agreement application procedure the difficulty is big,this article unifies the example to elaborate inserted in the type system based on DOS to realize the SOCKET correspondence.
        Keywordsembedded system;DOS;TCP/IP;SOCKET
        1
        随着科学技术的进步与发展,嵌入式系统在工业控制等领域的应用也越来越广泛,其功能和规模日益扩大,那么在这信息的时代里,设计具有网络功能的嵌入式系统是一个重要的发展方向。
        嵌入式PC与标准PC架构相同,采用相同的操作系统和软件开发平台,如Windows NTWin CELinuxDOS等,但嵌入式socket通信在哪一层PC安装一般是嵌入到其他设备或系统中,所以体积、功耗、抗震性等方面的特殊要求使其硬件环境与标准PC有所区别:其内存较小、无硬盘、甚至无显示功能或由远端的控制终端进行显示。
        因此视窗操作系统的强大功能发挥不出来,那么DOS以其内核小、操作简单、实时性强就在嵌入式PC领域中占有重要地位。然而,在 DOS操作系统缺少类似Windows环境下WinSock这样简单易用的API,使得在DOS下开发编制网络程序难度大。
        2 TCP/IP协议
        TCP/IP是一种常用的网络协议。它是一种通用的网络互联技术,即网络间物理和逻辑
的连接。网络互联的目标是建立一个同一的、协作的、提供通用服务的通信系统,具体方法是:在低层网络技术和高层网络技术之间增加一个中间软件,这个软件就是TCP/IP协议。
        TCP/IP协议分为4层:链路层、网络层、传输层和应用层,其核心部分是传输层协议(TCPUDP)、网络层协议(IP)和物理接口层,这3层通常在操作系统内核中实现。操作系统内核是不能直接与用户打交道的,必须通过一定的用户界面即SOCKET实现。网间应用程序之间的作用方式为客户机/服务器模式。TCP/IP协议核心与应用程序的关系如图1所示。
        3 SOCKET编程技术[3]
        一个完整的网间进程通信需要由2个进程组成,并且只能使用同一种高层协议。因此需要一个5元组来表示,即协议、本地地址、本地端口号、远地地址、远地地址号。这样一个5元组叫作1个相关,即2个协议相同的半相关才能组成一个合适的相关。图2是一个典型的TCP套接口对话,它采用客户/服务器模式,由服务器先建立自己的半相关并进入监听状态,看是否有与本端口连接的请求。客户端在建立好自己的半相关后向服务器端发起请求连接,服务器端在检测到连接后响应连接,这样就建立了一个连接。
        4 DOSSOCKET的实现
        利用NETWORK CLIENT FOR DOS驱动,设计出一组可满足TCP/IP的数据传输需要的函数即可。
        4.1 网卡安装
        进行网卡驱动程序的安装,进行TCP/IP协议的驱动,在config.sys中加入扩充内存的支持,并将DOS驻留到高端。config.sys文件如下:
        device=himem.sys
        device=c:\\dos\\ noems
        dos=high,umb
        files=30
        buffers=15,0
        4.2 网络编制方法
        在工程文件中加入DOSSOCKETS.LIB,程序中加入DSOCKETS.HDSOCKETSDEF.H。编程中用到的相关函数有:
        socket(int,int,int,int far*); 建立套接字
        ioctl(int,int,char far*,int far*);控制套接口的操作特性
        bind(int,struct sockaddr far*,int,int far*);为套接口联系一个名字;使服务器指定网络
        接口,从该接口接受连续请求
        connect(int,struct sockaddr far*,int,int far*);在两个套接口之间建立连接
        closesock(int,int far*);关闭套接口
        send(int,char far*,int,int,struct sockaddr far*,int,int far*);向套接口写数据
        recv(int,char far*,int,int,struct sockaddr far*,int,int
        far*);接收套口数据
        5 应用实例
        系统采用100 Mb/s带宽的快速以太网、100 Mb/s的交换机及数据库服务器等。本分系统的
        监控主机的硬件平台采用PC104嵌入式PC机,带有网卡、多串口卡、1553B卡、DI/O卡、电子盘卡等,软件平台为DOS。监控主机对本系统各设备进行实时监控并及时上报管理计算机;利用高速以太网接收信息完成对伺服系统的控制。具体实现为首先利用板卡厂家提供的网络驱动程序和NETWORK CLIENT FOR DOS驱动TCP/IP,然后利用DOSSOCKETS.LIB编制应用程序,软件具体实现采用中断方式接收,接收频率为20/s
        主程序如下:
        main()
        {
        …
        sd=sockets(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
        sa.sin_port=port;//设置本地IP地址
        sa.sin_family=AF_INET;
        sa.sin_addr.s_addr=ntohl(HOSTIP);
        ioctl(sd,FIONBIO,rti);//设置IO模式
        bind(sd,(PSOCKADDR)&sa,sizeof(sa));
        …
        old=getvect(0x0c);
        setvect(0x0c,cint);
        imr=inp(0x21);
        outp(0x21,imr&0xef);
        …
        for()
        {
        与各设备进行数据交换,将公用数据放入公用缓存;
        recvbuf数据组里将接收IP数据包存入缓存;数据处理;
        将处理后的数据存入sendbuf数组中;
        }
        imr=inp(0x21);
        outp(0x21,imr|0x10);
        setvect(0x0c,old);
        closesocket(sd);
        }
        中断处理程序:
        void interrupt cint()
        {
        if(符合接收条件)
        { …
        lanle=recv(sd,&recvbuf”0,300,0,(struct sockaddr*)&recv,&recvlen);
        …
        send(sd,&sendbuf0,50,0,(struct sockaddr*)&send,&sendlen);
        … }
        outp(0x20,0x64); }
        由此可见,在此驱动下编写捕获IP包程序很方便。在创建SOCKET后,将套接字与本地地址绑定就可按需求接受IP数据包并处理之。
        6
        目前,DOS在标准PC机中已经很少使用,但在嵌入式PC中却是主流操作系统。在DOS下实现基于TCP/IP协议的网络通信比较复杂、繁琐,上述的方法简洁有效地解决了这一问题,并在某工程通信软件中得到了验证、取得了良好的效果。
       
        1]罗军舟,黎波涛.TCP/IP协议及网络编程技术[M.北京:清华大学出版社,2004.
        2]谭献海.网络编程技术及应用[M.北京:清华大学出版社,2006.
        3]任泰明.TCP/IP协议与网络编程[M.西安:西安电子科技大学出版社,2004.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。