张锆 张钜
【摘要】套接字是一种网络编程接口,应用程序通过这种接口可以和不同网络中的应用程序进行通信,而不必担心网络协议不同所引发的问题。而Flash闪存是非易失存储器,可以对存储器单元块进行擦写和再编程,NOR和NAND是两种主要的非易失闪存技术,NOR主要应用在代码存储,NAND适合于数据存储。文章介绍了基于UDP协议的Socket网络编程机制和原理,完成了基于Socket协议的Flash固化工具的实现。
【关键词】Socket;UDP;FLASH
Abstract:Windows Socket is a network programming interface,and applications can correspond to eachother in different domains without worrying about the different protocols by using it.Flash Memory is Non-Voilatile memory,we can write or reprogramme the memory units.NOR and NAND are two leading Flash Memory technology,NOR used for code storage,NAND used for data storage.This paper introduces the mechanism and principle of Socket network programs based on UDP protocol,and realize a flash-writing tool based on Socket protocol.
key words:Socket;UDP;FLASH
1.Socket通信机制
Socket(套接字)机制是一种API,是网络应用程序的编程接口。Socket是通过标准文件描述符和其它程序通讯的一个方法。每一个套接字都用一个半相关描述,每一个套接字都有一个本地的由操作系统分配的唯一的套接字号。套接字接口主要有3种类型:流式套接字,数据报套接字和原始套字。流式套接字定义了一种面向连接的服务,实现了无差错无重复的顺序数据传输,无长度限制。数据报套接字接口定义了一种无连接的服务,数据通过相互独立的报文进行传输,它是无序的,并且不能保证可靠。原始套接字允许对低层协议IP或ICMP直接访问,主要应用于网络协议的测试。
2.UDP协议的工作原理
UDP协议是一个面向无连接的协议,其连接的建立不必像TCP那样需要服务器端侦听,也不需要有客户机请求连接,属于一种“强制”性的网络连接。UDP提供一对一或一对多的、无连接的数据报服务。该服务对消息中传输的数据提供不可靠的、最大努力的传送,这意味着它不保证数据的到达,也不保证所传送的数据报的顺序是否正确,UDP不重新传输丢失的数据。其主要工作是:将应用程序传输过来的数据分块交给网络层,确认接受到分组信息。尽管UDP无法像TCP一样提供可靠的数据传输,但UDP并不比TCP缺乏优越性。UDP在传输效率方面比TCP要高一些,而且许多应用程序并不需要保证严格的传输可靠性,比如视频会议系统等,需要实时的交互,但并不要求音频视频的绝对正确。使用UDP协议传输数据时,首先设置客户计算机的Local Port(本地端口)属性,而作为服务器的计算机只需要设置Remoter Host(远程主机)属性为客户计算机的IP地址或域名即可,并将其Remote Port属性设置为客户计算机上的Local Port属性。使用UDP端口号时,端口提供了用于发送消息的位置,每个端口由一个唯一的编号来标识。当应用程序向另一台计算机发送数据时,UDP生成一个数据头,包括源端口,这些端口提供送达信息所需要的地址。UDP协议还为数据和数据头计算出求和检验的值,在目标计算机中,数据包被传递至UDP协议程序并送到目的地端口。
3.UDP套接字的通信过程
采用UDP套接字方式实现C/S的通信程序由客户端和服务器端两部分组成。服务器进程依次按以下步骤进行:
1)调用Socket()创建一个数据报套接字;
2)调用bind()把服务器地址绑定在该套接字上;
3)调用recvform()等待客户进程发来的请求,服务器此时处于无限循环状态;
4)服务进程接收到客户进程所发来的数据报后,进行处理,调用sendto()将处理结果返回给客户进程,返回状态,继续监听;
5)服务进程调用close()撤消套接字,终止服务。
客户进程则按以下步骤进行:
1)调用Socket()创建一个数据流套接字;
2)调用sendto()向服务器进程发送数据报;
3)调用recvfrom()等待服务器进程返回该处理结果;
4)客户进程调用close()撤消套接字。
4.FLASH存储芯片简介
Flash是存储芯片的一种,通过特定的程序可以修改里面的数据。Flash在电子以及半导体领域内往往表示Flash Memory的意思,即平时所说的“闪存”,全名叫Flash EPPROM Memory。它结合了ROM和RAM的长处,不仅具备电子可擦除可编程的性能,还可以快速读取数据,使数据不会因为断电而丢失。目前Flash主要有两种NORFlash和NANDFlash。NORFlash的读取和我们常见的SDRAM的读取时一样的,用户可以直接运行装载在NORFlash里面的代码,这样可以减少SRAM的容量从而节约了成本。NANDFlash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NANDFlash上的代码,因此好多使用NANDFlash的开发板除了使用NANDFlash以外,还加上了一块小的NORFlash来运行启动代码。一般小的容量的用NORFlash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NANDFlash,最常见的NANDFlash应用时嵌入式系统采用的DOC和我们通常用的“闪盘”,可以在线擦除。
5.固化工具实现
固化工具分为两大部分,PC端和目标机端。PC端采用VC环境,提供可操作的界面,负责加载参数的解析填写和向目标机端发送加载数据。目标机端采用C语言编写,最终固化在嵌入式设备的FLASH中,主要负责加载数据的接收和数据的FLASH固化操作。
具体的固化流程如图1所示,首先PC端和目标机端分别进行初始化,创建一个基于Socket的连接。接下来PC端解析获取加载的参数等信息,通过调用sendto接口,将信息附加在数据包头中随加载数据一同发送至目标机端。而目标机端在初始化完成后则调用recvfrom接口进行等待操作,当收到PC端发送的数据包后进行解析处理,调用FLASH芯片的相关驱动接口将数据固化在相应的FLASH地址空间。固化操作完成后向PC端返回处理结果,PC端继续发送下一包数据,如此反复直到所有数据发送完毕,全部固化在FLASH中。
图1 固化流程图
数据传输固化只是最基本的功能,工具还有其他一些拓展功能,比如固化文件信息的记录和显示、固化数据的回传、固化数据的CRC校验等,在这里不一一赘述。
6.结束语
本文通过介绍基于UDP协议的Socket通信机制和FLASH存储介质的基本特性,在此基础上实现了一款PC端到目标机端的固化工具,保证固化数据有序可靠的固化至目标极端。
参考文献
[1]周坤,傅德胜.基于Windows Socket 的网络数据传输及其安全[J].计算机工程与设计,2007,28(22):5381-5386.
[2]夏靖波.Windows 网络程序设计[M].西安:电子科技大学出版,2006.
[3]于宗光,何耀宇.闪速存储器的研究与进展[J].1999,24, 5:1-7.
作者简介:张锆(1988—),男,陕西西安人,主要研究方向:计算机科学与技术。