




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录摘 要4一、概述7(一)、嵌入式简介7(二)、国内发展现状7(三)、本文的主要研究内容7二、嵌入式设备的软硬件设计7(一)、嵌入式系统的特点与发展71嵌入式的定义与特点。72嵌入式处理器的发展。83本设计所采用的处理器及实验板介绍。8(二)、嵌入式操作系统简介81嵌入式操作系统的分类和发展。82uclinux的发展过程。93uclinux的移植。9(三)、uclinux下应用程序的设计111uclinux下的文件系统及应用程序设计方法112应用程序设计13三、嵌入式设备与pc上位机的通信17(一)、socket编程简介171网络基础知识。172socket编程的概念。183并发服务器基础
2、。20(二)、嵌入式中unix下的socket程序设计221socket程序要实现的功能和总体设计。222发送数据报格式。233接受的数据报格式。234参数控制。23(三)、上位机中winsock程序设计241windows下socket编程的简介。242并发服务器采用的算法。243c#中socket编程的注意事项。25四、基于c/s的嵌入式远程监控系统的设计26(一)、服务器所要实现的功能261服务器要实现的功能分析。262采用c/s模式的原因26(二)、c/s结构系统总体设计261c/s结构中服务器的数据库基本表结构262表的关系图27(三)、服务器端程序设计271连接数据库及数据库操作。
3、272用户登录及用户管理模块283冷库管理模块284参数配置管理模块295温度查询模块296ip更改模块29五、基于b/s的远程查询系统的设计30(一)、b/s模式实现的功能及用途30(二)、水晶报表简介30(三)、远程查询模块的实现301水晶报表的使用方法302远程查询的实现30六、结论30谢 辞31参考文献32附 录33摘 要远程测控系统是集计算机技术、测控技术、网络技术于一体的技术密集型产品系统。随着通信技术、集成电路制造技术的快速发展以及internet技术的广泛应用,远程测控技术获得了长足的发展。本论文以工业冷库为例对基于internet的远程测控系统进行了研究。本论文首先对嵌入式系
4、统的硬件进行了分析,选择了合适的开发设备,采用了uclinux操作系统作为嵌入式设备上的操作系统,对uclinux内核的裁剪和移植做了详细介绍,同时介绍了交叉编译环境,搭建了一个完整的嵌入式开发平台。介绍了在此平台下用c语言开发的嵌入式应用程序,实现了数据采集,数据通讯和数据控制等功能。本论文讨论了socket编程在跨系统下的应用,确定了c/s模式的网络框架结构。服务器端采用的开发工具是c#,数据库采用了sqlserver,实现了关于冷库的各种数据的操作。同时考虑到实际应用中的远程查询,设计了b/s模式的远程查询模块,采用了水晶报表(crystal report)作为报表生成和打印的工具。本论
5、文的软件平台为该远程监控系统进一步开发打下了良好的基础,文章最后提出了应改进的问题,对后期进一步完善提出一些意见。关 键 字嵌入式系统,监控系统,crystal report,socket编程,uclinuxabstractremote monitoring&controlling system is a density technology product system, which includes computer technology, measuring technology and net technology. with the development of communicat
6、ion technology,the manufacture technology of integrate circuit and the widely application of internet technology, the remote monitoring&controlling system technology has developed faster and faster. in this thesis some research on the remote monitoring&controlling system, for example, industry store
7、house, based on internet is carried out.the thesis analyzed the hardware of the embedded system and chose proper development device. uclinux was selected as operation system on embedded device. further analysis on uclinux about its tailor and transportation is done in this paper. simultaneously,the
8、in compiling environment of uclinux o/s and its application programmes base on the redhat linux o/s was set up. the embedded application programme was developed in c language and data acquisition, communication and control have been realized.the paper discussed the application of socket programming
9、using in different operation system. the net structure of the design based on client/server model. c# was used as development tool and sqlserver database was used as the background database. various operation on data are realized by the server about the storehouse.meanwhile considering of the remote
10、 request, browse/server model was adopted as a remote request module. crystal report was used as a tool to generate and print report.the software platform of this paper makes good foundation for future research work. in the end of the paper some questions that need to be improved are put forward als
11、o with the suggestions that would perfect the design.key wordembedded system ,control system ,crystal report ,socket programming ,uclinu一、概述(一)、嵌入式简介嵌入式系统是以应用为中心,以半导体技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,适用于应用系统对功能可靠性、成本体积功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,主要作用是实时控制(c
12、ontrol)、监视(monitor),管理移动计算机(management)、数据处理等,或者辅助其它设备运转,完成各种自动化处理的任务。嵌入式系统是一个技术密集、资金密集、高度分散、不断创新的知识集成系统,对整个系统的体积功耗成本等都有严格的限制,嵌入式系统的设计不同于桌面计算机系统设计的一个方面在于:嵌入式系统非常受限于功能和具体的应用环境,如实时性的要求;对外部事件必须保证在规定时间内进行响应;功率预算、散热必须符合环境要求;有体积、重量的限制;需要令人满意的安全性可靠性;系统本身的成本需求等。因此在嵌入式系统设计时需要重点考虑下面一些因素:实时性好,可靠性高,集成度高,功耗低,环境适
13、应能力强,系统成本低等。(二)、国内发展现状 基于internet/intranet的嵌入式远程监控技术在我国处于起步阶段,近年国家出台了一系列信息产业政策,大力发展信息产业,对电子信息行业的企业在政策、税收等方面实行了相当的优惠,这大大促进了作为信息产业一部分的嵌入式远程监控系统的发展。国内的远程监控技术正在被广泛的应用到安防、邮电、电力、通讯、银行、工业控制等国民经济中的各个领域。随着工业控制技术的发展、网络传输速度的提高、国内芯片制造业的日趋壮大,嵌入式网络远程监控技术必将获得长足的发展,从而有力的促进国民经济的发展。(三)、本文的主要研究内容本设计主要结合嵌入式远程测控系统在工业冷库方
14、面的应用设计了一套完整的软硬件解决方案。首先,了解嵌入式近几年的发展,选择合理的嵌入式设备和操作系统,搭建实验平台,了解开发环境。对嵌入式操作系统进行了研究,分析了其内存管理、进程调度、文件系统。了解嵌入式硬件设备所能实现的功能,完成嵌入式设备上应用程序的总体设计,找出不能实现的模块,进行模拟。完成uclinux操作系统的定制和移植。完成嵌入式设备上温度测控部分的设计和开发。完成嵌入式设备和上位机的通讯模块,妥善解决并发服务器的问题,保证工业系统要求的实时性。设计完成上位机(pc)上的基于c/s模式的信息存储和管理程序和基于b/s模式的信息浏览程序。二、嵌入式设备的软硬件设计(一)、嵌入式系统
15、的特点与发展1嵌入式的定义与特点。嵌入式系统应定义为:“嵌入到对象体系中的专用计算机系统”。“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。对象系统则是指嵌入式系统所嵌入的宿主系统。这个定义是较多定义的一种,对于嵌入式的真正官方定义还仍然在讨论中,不过这不会对嵌入式的发展和应用带来任何影响。按照上述嵌入式系统的定义,只要满足定义中三要素的计算机系统,都可称为嵌入式系统。嵌入式系统按形态可分为设备级(工控机)、板级(单板、模块)、芯片级 (mctf, soc)。2嵌入式处理器的发展。嵌入式系统的核心部件是各种类型的嵌入式处理器,目前据不完全统计,全世界嵌入式处理器的品种总量己经
16、超过1000多种,流行体系结构有30几个系列,可以分成下面几类。(1)嵌入式微处理器(embedded microprocessor unit, empu)。(2)嵌入式微控制器(microcontroller unit, mcu) 。(3)嵌入式dsp处理器(embedded digital signal processor, edsp)。(4)嵌入式片上系统(system on chip)我们要使用的是samsong公司生产的32位嵌入式处理器s3c44b0x 处理器。s3c44b0x微处理器是一款低功耗、高集成度的基于arm7tdmi核的微处理器。3本设计所采用的处理器及实验板介绍。s3
17、c44b0x微处理器的体系结构,它采用了16/32位risc结构和arm精简指令集,thumb协处理器在保证性能的前提下使代码密度最大;片上ice支持jtag调试方式;32*8位硬件乘法器。本设计采用的实验板是jx44b0 arm嵌入式教学实验箱。其硬件系统包含了嵌入式系统开发应用所需的大部分接口,如以太网、usb接口、音频接口、触摸屏及键盘等。实验箱结构如图所示。(二)、嵌入式操作系统简介1嵌入式操作系统的分类和发展。嵌入式操作系统的种类繁多,但大体上可分为2种商用型和免费型。目前商用型的操作系统主要有vxworks,windowsce,psos,palm os,os-9,lynxos,qn
18、x,lynx等。他们的优点是功能稳定、可靠,有完善的技术支持和售后服务,而且提供了如图形用户界面和网络支持等高端嵌入式系统要求的许多高级的功能,缺点是价格昂贵且代码封闭,这就大大影响了开发者的积极性。目前免费型的操作系统主要有linux和uc/os-ii,他们在价格方面具有很大的优势。比如嵌入式linux操作系统以价格低廉,功能强大,易于移植而且程序源码全部公开等优点正在被广泛采用。linux是一种在网络上产生的操作系统,它的诞生己经有13年的历史。在工nternet上,有大量linux的免费版本和其它资源。与传统的操作系统不同,linux操作系统的开发一开始就是在fsf的gal的版本控制之下
19、,linux内核的所有源代码都采取了开放源代码的形式。与其他操作系统相比,linux操作系统具有以下优点:第一,内核稳定、功能强大、支持多种平台、应用软件多、兼容性好; 第二,内核可根据需要任意裁剪;第三,使用成本低;第四,多专业的商业与公司参与,发展潜力大。2uclinux的发展过程。linux操作系统本身是从unix操作系统演化而来。linux操作系统从诞生之初就是一个免费的操作系统,可初期的linux版本确不能直接运行于传统的工业控制用微处理器,因为工业控制上大量使用的微处理器一般不需要内存管理的功能,所以一般的都不会有mmu。可是linux设计之初(其它操作系统一般也是)是面向有me
20、的处理器的。在很多工程师的共同努力工作下,linux经过改进以后可以在这些没有mmu的微处理器上运行,uclinux就是其中最著名的发行版本之一。uclinux最初是由几位软件工程师移植在基于motorola公司的dragonball微处理器的一款palm上面。随着m68k系列微处理器延续到coldfire系列微处理器,uclinux主要也就集中应用在coldfire微处理器上。当然,随着其它微处理器的广泛应用,uclinux也已经被广泛使用在了arm, mips, sparc, superh等等没有mmu的微处理器上。3uclinux的移植。下图所示为本设计所采用的是实验环境及开发流程。在主
21、机的red hat linux操作系统下安装uclinux-dist发行包以及交叉编译器arm-elf-tools。然后对uclinux进行配置并选择适合本试验系统的相关配置,配置完成后进行编译,生成uclinux映像文件zimage。然后通过jx44b0提供的bootloader将该文件下载到目标板并运行。主机目标机s3c44b0x:redhat linuxbootloader启动bootloader下载uclinux映像文件运行uclinux安装uclinux-dist安装arm-elf-tools配置make menuconfig编译(1)移植的概念基于处理器的移植这种类型的移植要求从支
22、持处理器的编译器开始。这是最主要也是最困难的一步。基于处理器的移植还包括操作系统的移植 (假如嵌入式设备不需要操作系统,则编译器完成后就可以进入编写应用的阶段)。另外从编写应用的角度来看,还必须提供函数库。因此函数库的移植也是必须的。基于平台的移植 这种移植相对于处理器的移植而言所处的开发层次更高,主要在板级上进行。对于一个嵌入式设备,除了处理器还要有很多周边的器件才能正常工作。因此操作系统在运行时必须初始化特定目标板的器件。(2)交叉编译环境的搭建通常程序在一台计算机上编译,然后再分布到将要使用的其它计算机上。将主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,
23、该过程就叫做交叉编译。本课题的主机采用的是x86体系结构的redhat linux系统,目标系统是s3c44b0x arm7tdmi处理器。采用arm-elf-tools交叉编译环境arm-elf-tools-20030314.sh,该工具可从/pub/uclinux/arm-elf-tools/上下载。得到这个文件以后,执行以下命令:sh arm-elf-tools-20030314.sh这个命令将在主机上安装uclinux-arm的交叉编译环境。安装完成后,键入arm-elf-gcc,如果能看到下面的输出信息:arm-elf-gcc:no input file
24、s表示uclinux-arm的交叉编译环境已建立。(3)uclinux源代码的安装本课题的uclinux发行文件为uclinux-dist-jx44b0.tar.gz,在redhat下将该文件拷贝到/home/cvtech/jx44b0目录下,然后在该目录下执行tar zxvf uclinux-dist-jx44b0.tar.gz。当tar程序运行完毕后,在/home/cvtech/jx44b0目录下会有一个uclinux-dist的新目录,这个目录就是uclinux的源码根目录,里面有进行uclinux开发的所有源代码。(4)编译uclinux内核键入命令cd /home/cvtech/jx
25、44b0/uclinux-dist/linux-2.4.xmake menuconfig启动菜单配置工具后,选择load an alternate configuration file选项,然后确认。该选项将载入jx44b0的标准配置文件config-jx44b0,该文件保存在/home/cvtech/jx44b0/uclinux-dist/2.4.x目录下,此文件不能修改。保存后显示内核配置选项,各项意义如下表:键入命令make dep建立依赖关系键入命令make zimage编译内核生成的uclinux映像文件保存在/home/cvtech/jx44b0/uclinux-dist/imag
26、es目录下。(5)配置文件编译内核涉及到的配置文件有很多,最重要的就是vendors/xxx/xxx/makefile。在内核编译的过程中,将会调用此makefile文件,此文件的作用是构成root文件系统,并进行压缩,生成romfs.o。在生成root文件系统的过程中,有可能还会用到motd,rc,inittab等文件,则需要为此makefile文件准备这些文件,凭程序要增添设备,需要往root文件系统中增添文件都可以在此makefile中惊醒相应的更改。(三)、uclinux下应用程序的设计1uclinux下的文件系统及应用程序设计方法(1)文件系统简介随着linux的不断发展,它所支持的
27、文件格式系统也在迅速扩充。linux系统核心可支持10多种文件系统的类型:jfs,reiserfs,ext,ext2,ext3,iso9660,xfs,minx,msdos,umsdos,vfat,ntfs,hpfs,nfs,smb,sysv,proc和romfs等。本课题采用的是romfs文件系统,它的特点如下:romfs文件系统是一个精简的只读文件系统。相对于一般的ext2文件系统,它要求更少的空间。romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。jx44b0 uclinux系统采用的就是romfs文件系统。
28、(2)uclinux根文件系统的制作uclinux发行版本中包含所有跟文件系统应用程序的所有源程序,并可配置以进行文件系统的裁剪。文件系统源代码位于/home/cvtech/jx44b0/uclinux-dist/user目录下。在/home/cvtech/jx44b0/uclinux-dist/目录下执行:make menuconfig并选择customize vendor/user setting后,将打开文件系统配置菜单,用户可以自由定制。然后执行make编译内核和文件系统,编译后的文件系统位于/home/cvtech/jx44b0/uclinux-dist/romfs目录中,然后通过g
29、enromfs程序生成文件系统映像文件/home/cvtech/jx44b0/uclinux-dist/images/romfs.img。其命令为:genromfs v v “romdisk” f ./uclinux-dist/images/romfs.img d ./uclinux-dist/romfs前一个目录是生成的映像文件名(包括路径),后一个是文件系统根目录。(3)uclinux下应用程序的设计方法下面结合我所设计的具体程序分析uclinux下应用程序的设计方法,我的源程序的文件名为ad.c。首先用gedit工具编辑源程序ad.c,保存在/home/cvtech/jx44b0/ad目
30、录中。然后编写makefile文件,使用vi编辑工具编辑makefile文件,如下所示并保存于/home/cvtech/jx44b0/ad目录中。cc=arm-elf-gccld=arm-elf-ldexec=adobjs=ad.ocflags+=ldflags+= -wl,-elf2fltall:$(exec)$(exec):$(objs)$(cc) $(ldflags) -o $ $(objs) $(ldlibs$(ldlibs_$) cp $(exec) ./uclinux-dist/romfs/bingenromfs -v -v romdisk -f ./uclinux-dist/im
31、ages/romfs.img -d ./uclinux-dist/romfs$(ld) -r -o ./uclinux-dist/linux-2.4.x/romfs.out -b binary ./uclinux-dist/images/romfs.imgclean:-rm -f $(exec) *.elf *.gdb *.o$(objs):下面简要介绍一下各个部分的含义所采用的编译器和链接器cc=arm-elf-gccld=arm-elf-ld生成的执行文件和链接过程中的目标文件exec=adobjs=ad.o编译和链接的参数,其中”-wl,-elf2flt”是必须的,他告诉编译器产生flt
32、格式的执行文件。cflags+=ldflags+= -wl,-elf2flt编译命令,执行完成将生成ad映像文件。$(cc) $(ldflags) -o $ $(objs) $(ldlibs$(ldlibs_$)拷贝ad映像文件到romfs中。cp $(exec) ./uclinux-dist/romfs/bin生成romfs映像。genromfs -v -v romdisk -f ./uclinux-dist/images/romfs.img -d ./uclinux-dist/romfs将romfs映像转换成binary的romfs.out文件,uclinux核心链接时自动将该文件链接到映
33、像文件中。$(ld) -r -o ./uclinux-dist/linux-2.4.x/romfs.out -b binary ./uclinux-dist/images/romfs.img清除。clean:-rm -f $(exec) *.elf *.gdb *.o其次配置ad自动运行。因为嵌入式设备上的程序应该是一直运行的,即只要嵌入式设备开机就要一直运行,所以要将ad程序配置为开机自动运行。这就需要编辑romfs中的启动脚本文件,该文件为:/home/cvtech/jx44b0/uclinux-dist/romfs/etc/rc使用vi编辑器编辑,在该文件最后添加如下脚本:/bin/ad
34、该脚本将启动后运行ad,直到程序退出。或者/bin/ad &他将后台运行ad,不影响其他程序的运行。本设计采用这种方法,可以不影响其他程序的运行。再次编译ad,编译ad并更新文件系统,make clean可以清除过去编译留下的二进制文件,.elf文件,.gdb文件,以免影响此次编译。make命令就寻找makefile文件并执行。最后重新编译uclinux。接着将生成的zimage映像下载到目标版,然后启动uclinux,ad程序就会自动运行了。2应用程序设计由于嵌入式设备中的程序不能像pc上位机中的程序那样方便修改,所以在设计时要充分考虑到灵活性,参数都要采用可以修改的方式,而修改的方法是从p
35、c机上的界面中设置专门的界面,然后将新信息发送给嵌入式系统,将其写到文件中,当嵌入式设备用到这些参数的时候可以从文件读取。后面的冷库配置参数,服务器ip地址都是采用此方法。(1)总体设计。嵌入式应用程序要实现的主要功能就是对冷库温度数据的测量和控制以及传输。这个程序要在开机状态下循环执行,因此是一个循环调用的过程,三个模块的程序将会互相调用。首先是数据采集模块数据,数据采集是用实验箱上的ad转换模块模拟实现,它按照固定的时间间隔采集了数据之后就调用数据控制模块,数据控制模块将会根据所采集的数据值采取相应的控制操作,然后调用传输模块,将数据传送给上位机。然后回到数据采集模块,如此循环,直到关机或
36、程序异常退出。本模块应当尽量考虑到工业应用中的实际情况,各种参数应当设计为可以自由修改,这样可以扩大本模块的应用范围。(2)数据采集模块。本模块实现的主要功能是数据采集。实现中会遇到的主要问题有:第一,在现实应用中,数据采集应该是通过传感器、变送器传输到嵌入式设备中,再进行a/d转换,但由于实验设备的限制,在本设计中直接采用实验箱上的a/d转换模块模拟此过程。第二,采样频率的读取。工业应用中的采样频率应该是随着冷库中的物品而有所差别,不能一概而论。因此需要从上位机的数据库中读出相应的冷库中存放的物品,并按相应的采样频率采样。上位机将相应的参数设置(包括采样频率,最大值最小值等)发给嵌入式设备,
37、嵌入式设备将其写入文件config然后再从此文件中读出,无论何时改变参数设置,都可以保持嵌入式设备按照最新的采样频率进行采样。第三,采样时间间隔的具体实现过程。a/d转换模块中采样的最大时间间隔也只有0.124ms左右,所以用a/d转换模块要实现长时间的采集就要采用一直采集,但是知道要求时间才将数据传输给下一个模块。读出文件中要求的采样间隔时间,例如:间隔时间为300s,则300/0.000124=2419354则循环采样2419354次之后才可以将数据发送给数据控制模块。void test_adc(void)int loop_delay,fd,spaceflag=0,display_flag
38、1=100,display_flag2;int data = 0;int get_index;char c;char sendbuffermaxdatasize;char flagbuf100; rclkcon=0x7ff8;if(fd=open(config,o_rdonly)=-1)fprintf(stderr,open failedn);read(fd,&c,1);while(c!= |spaceflag!=2)if(c= )spaceflag+;elseread(fd,&c,1);read(fd,flagbuf,5);erase_spaces(flagbuf); display_fla
39、g2=atoi(flagbuf); while(1) int value;radcpsr=0xff;data = 0;for(get_index = 0; get_index 16; get_index+)radccon=0x1|(0x3maxny清屏,开压缩机maxflag=1minfalg=0maxflag=1ny报警,告知pc机,在lcd上显示结束程序如下:if(datamax)printf(enter datamaxn);if(maxflag=1)printf(enter temprature higher,display,alarmn);display(温度过高);communaca
40、te(sendbuffer1);myalarm();elseprintf(set maxflag,open ledn);lcd_clear_screen(white);maxflag=1;led(0);minflag=0;小于的部分同理可知。(4)数据通讯模块。这个模块负责实现和pc上位机的通讯。嵌入式系统发给pc上位机的数据包有三种。第一种,警报(冷库ip,温度过高还是过低),这种消息以warn开头。第二种,冷库数据(冷库ip,温度),这种消息以data开头。第三种,启动时发送ip。这种消息以ipad开头。由于发送的必须为字符串,所以要将数值型数据转化为字符串。同时由于linux下并不支持i
41、toa或者ftoa函数,由于linux不支持相应的库,所以采用sprintf函数将数值转化为字符串。sprintf函数的用法如下:int sprintf(char *str, char *format, variable-list); 它与printf()函数不同之处是将按格式化规定的内容写入str 指向的字符串中, 返回值等于写入的字符个数。由于数据通讯模块的具体实现方法是采用socket编程,因此将此模块具体实现放在后面介绍socket编程的部分讲解。数据通讯模块还要涉及的一个操作就是暂时保存不能发送的数据。网络如果暂时产生故障,那么在故障期内嵌入式设备采集的数据必须暂时保存,待到网络正常
42、后在一起发送给pc上位机。在这里我们不采用嵌入式内嵌数据库,直接采用文件读写。因为数据量不大,而且我们信任网络的可靠性,不会产生长时间瘫痪。三、嵌入式设备与pc上位机的通信(一)、socket编程简介1网络基础知识。(1)计算机网络的概念。我们现在已经进入了一个以网络为核心的信息时代。计算机网络已经渗透到社会生活的各个方面。现在计算机网络普遍遵守的是tcp/ip协议集的协议,将网络分为四层结构,即数据链路层,网络层,运输层和应用层。如图所示 用户进程用户进程用户进程用户进程 应用层tcpudp 运输层icmpipigmp网络层arp硬件接口rarp 链路层传输介质本设计采用的是tcp协议传输数
43、据,因此在此简要介绍一下tcp建立连接的过程。tcp建立连接是一个三路握手的过程。如图所示客户端服务器端socketsocket,bind,listenconnect(阻塞syn jaccept(阻塞)syn k,ack j+1connect返回ack k+1accept返回(2)网络通讯与传统通信方式的区别传统的串口通讯方式主要有rs232和rs485两种,他们的直连距离和传送速率都不高。rs232接口标准的直连距离仅为15米,传送速率小于20kb/s。rs485的直连距离和传送速率虽然有所提高,但是相对于百兆以太网来说还是相距甚远。传统的串口通讯方式的劣势不只在传送距离和速率上,在其方便性
44、上也远远不如以太网通讯。由于我们的嵌入式设备采用了uclinux操作系统,它本身支持网络通讯,提供的是10m网卡,我们只需要遵循tcp/ip协议接收和发送内容即可,不需了解其他内容。2socket编程的概念。(1)套接口socket概念简介。socket是一种双向的通讯端口,一对互联的套接口提供通讯接口,使两端都可以传输数据,具体地说,socket类似于unix下的管道,使用方法与双工管道很类似。socket 套接口增加了网络通信操作的抽象定义,与文件操作一样,每个打开的socket都对应一个整数,我们称它为socket描述符,该整数也是socket描述符在文件描述符表中的索引值。只不过soc
45、ket描述符在描述符表中的表项并不指向文件表,而是指向一个与该socket有关的数据结构。使用系统调用socket,我们可以得到socket描述符,然后可以使用send和recv调用而与其它的程序通信。我们也可以使用一般的文件操作来调用read和write对socket描述符进行读写,从而与其它的程序进行通讯。(2)套接口socket使用简介。网络编程中最常见的是客户/服务器模式。以该模式编程时,服务器有一个进程或多个进程(本设计采用的是多个线程,这在下面将给予介绍)在指定的端口等待客户来连接,服务器程序等待客户的连接信息,一旦连接上之后,就可以按约定的数据交换方法和格式进行数据流传输。客户端
46、在需要的时刻发出向服务端的连接请求。使用tcp/ip协议通信时,最常见的应用模式流程如下图所示: socketbindsocketlistenacceptconnect建立连接readwrite数据流writeread数据流closeclose为了和多个客户通信,服务器端一般在accept返回后创建一个新的进程进行与客户端的通信,父进程则回到accpet调用处等待另一个连接。客户端进程一般先使用socket调用得到一个socket描述符,然后使用connect向指定的服务器上的指定端口发起连接,一旦连接成功返回,就说明已经建立了与服务器的连接,这时客户段就可以通过socket描述符进行读写操作
47、了。(3)套接口地址结构。首先介绍的是通用套接口地址结构,在中定义,其结构如下:struct sockaddrussigned short sa_family;/*address family,af_xxx*/char sa_data14;/*14 bytes of protocol address*/;其中,字段sa_family是协议族,指出通信协议类型,对于internet域的地址族为af_inet。字段sa_da存储实际地址(不同的协议族地址格式不一样)。(4)套接口编程的基本系统调用。socket函数:功能:系统调用socket来获得一个socket描述符,调用格式如下:socket
48、(int domain,int type,int protocol);socket 函数指定了协议族(ipv4、ipv6或unix)和套接口类型(字节流、数据报或原始套接口)。但并没有指定本地协议地址或远程协议地址。bind 函数:功能:给套接口分配一个本地协议地址int bind(int sockfd, const struct sockaddr *my_addr, int addrlen);sockfd 是调用 socket 返回的文件描述符。my_addr 是指向数据结构 struct sockaddr 的指针,保存地址(即端口和 ip 地址) 信息。addrlen 设置为 sizeof
49、(struct sockaddr)。让内核自动处理地址ip和端口portmy_addr.sin_port = 0; /* choose an unused port at random */my_addr.sin_addr.s_addr = inaddr_any; /* use my ip address */bind( ) 自己选择合适的端口:将0赋给 my_addr.sin_port。自动填上他所运行的机器的 ip 地址:my_addr.sin_addr.s_addr 设置为inaddr_any。connect 函数:功能:建立与tcp服务器的连接int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);serv_addr 是保存着目的地端口和 ip 地址的数据结构 struct sockaddrconnect 激发 tcp的三路握手过程listen 函数功能:将未连接主动套接口的转换为被动套接口,指示内核接受对该套接口的连接请求。int l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同买卖担保协议书
- 借款合同第三方担保
- 医疗器械服务协议合同
- 建筑次结构劳务合同
- 房地产融资居间合同书
- 工作接送服务合同范本
- 项目合同终止申请书(2025年版)
- 牙膏批发合同范本
- 规划与总体专业绿色建筑分析报告与计算书的内容要求
- 财务审计框架合同范本
- 第2课+古代希腊罗马(教学设计)-【中职专用】《世界历史》(高教版2023基础模块)
- 工会制度牌模板
- 2024年高级统计实务考试真题及答案解析
- 《日语零基础学习》课件
- 打样中心管理制度
- 前列腺癌护理个案查房课件
- 美团外卖平台转让协议
- 2023年1月自考11466现代企业人力资源管理概论试题及答案含解析
- 外研版(三年级起点)三年级下册英语单词表-
- 幼儿园食谱播报
- 全国导游考试(面试)200问及面试内容(附答案)
评论
0/150
提交评论