張鋯 張鉅
【摘要】套接字是一種網(wǎng)絡(luò)編程接口,應(yīng)用程序通過這種接口可以和不同網(wǎng)絡(luò)中的應(yīng)用程序進(jìn)行通信,而不必?fù)?dān)心網(wǎng)絡(luò)協(xié)議不同所引發(fā)的問題。而Flash閃存是非易失存儲(chǔ)器,可以對(duì)存儲(chǔ)器單元塊進(jìn)行擦寫和再編程,NOR和NAND是兩種主要的非易失閃存技術(shù),NOR主要應(yīng)用在代碼存儲(chǔ),NAND適合于數(shù)據(jù)存儲(chǔ)。文章介紹了基于UDP協(xié)議的Socket網(wǎng)絡(luò)編程機(jī)制和原理,完成了基于Socket協(xié)議的Flash固化工具的實(shí)現(xiàn)。
【關(guān)鍵詞】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通信機(jī)制
Socket(套接字)機(jī)制是一種API,是網(wǎng)絡(luò)應(yīng)用程序的編程接口。Socket是通過標(biāo)準(zhǔn)文件描述符和其它程序通訊的一個(gè)方法。每一個(gè)套接字都用一個(gè)半相關(guān)描述,每一個(gè)套接字都有一個(gè)本地的由操作系統(tǒng)分配的唯一的套接字號(hào)。套接字接口主要有3種類型:流式套接字,數(shù)據(jù)報(bào)套接字和原始套字。流式套接字定義了一種面向連接的服務(wù),實(shí)現(xiàn)了無差錯(cuò)無重復(fù)的順序數(shù)據(jù)傳輸,無長度限制。數(shù)據(jù)報(bào)套接字接口定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,它是無序的,并且不能保證可靠。原始套接字允許對(duì)低層協(xié)議IP或ICMP直接訪問,主要應(yīng)用于網(wǎng)絡(luò)協(xié)議的測(cè)試。
2.UDP協(xié)議的工作原理
UDP協(xié)議是一個(gè)面向無連接的協(xié)議,其連接的建立不必像TCP那樣需要服務(wù)器端偵聽,也不需要有客戶機(jī)請(qǐng)求連接,屬于一種“強(qiáng)制”性的網(wǎng)絡(luò)連接。UDP提供一對(duì)一或一對(duì)多的、無連接的數(shù)據(jù)報(bào)服務(wù)。該服務(wù)對(duì)消息中傳輸?shù)臄?shù)據(jù)提供不可靠的、最大努力的傳送,這意味著它不保證數(shù)據(jù)的到達(dá),也不保證所傳送的數(shù)據(jù)報(bào)的順序是否正確,UDP不重新傳輸丟失的數(shù)據(jù)。其主要工作是:將應(yīng)用程序傳輸過來的數(shù)據(jù)分塊交給網(wǎng)絡(luò)層,確認(rèn)接受到分組信息。盡管UDP無法像TCP一樣提供可靠的數(shù)據(jù)傳輸,但UDP并不比TCP缺乏優(yōu)越性。UDP在傳輸效率方面比TCP要高一些,而且許多應(yīng)用程序并不需要保證嚴(yán)格的傳輸可靠性,比如視頻會(huì)議系統(tǒng)等,需要實(shí)時(shí)的交互,但并不要求音頻視頻的絕對(duì)正確。使用UDP協(xié)議傳輸數(shù)據(jù)時(shí),首先設(shè)置客戶計(jì)算機(jī)的Local Port(本地端口)屬性,而作為服務(wù)器的計(jì)算機(jī)只需要設(shè)置Remoter Host(遠(yuǎn)程主機(jī))屬性為客戶計(jì)算機(jī)的IP地址或域名即可,并將其Remote Port屬性設(shè)置為客戶計(jì)算機(jī)上的Local Port屬性。使用UDP端口號(hào)時(shí),端口提供了用于發(fā)送消息的位置,每個(gè)端口由一個(gè)唯一的編號(hào)來標(biāo)識(shí)。當(dāng)應(yīng)用程序向另一臺(tái)計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí),UDP生成一個(gè)數(shù)據(jù)頭,包括源端口,這些端口提供送達(dá)信息所需要的地址。UDP協(xié)議還為數(shù)據(jù)和數(shù)據(jù)頭計(jì)算出求和檢驗(yàn)的值,在目標(biāo)計(jì)算機(jī)中,數(shù)據(jù)包被傳遞至UDP協(xié)議程序并送到目的地端口。
3.UDP套接字的通信過程
采用UDP套接字方式實(shí)現(xiàn)C/S的通信程序由客戶端和服務(wù)器端兩部分組成。服務(wù)器進(jìn)程依次按以下步驟進(jìn)行:
1)調(diào)用Socket()創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字;
2)調(diào)用bind()把服務(wù)器地址綁定在該套接字上;
3)調(diào)用recvform()等待客戶進(jìn)程發(fā)來的請(qǐng)求,服務(wù)器此時(shí)處于無限循環(huán)狀態(tài);
4)服務(wù)進(jìn)程接收到客戶進(jìn)程所發(fā)來的數(shù)據(jù)報(bào)后,進(jìn)行處理,調(diào)用sendto()將處理結(jié)果返回給客戶進(jìn)程,返回狀態(tài),繼續(xù)監(jiān)聽;
5)服務(wù)進(jìn)程調(diào)用close()撤消套接字,終止服務(wù)。
客戶進(jìn)程則按以下步驟進(jìn)行:
1)調(diào)用Socket()創(chuàng)建一個(gè)數(shù)據(jù)流套接字;
2)調(diào)用sendto()向服務(wù)器進(jìn)程發(fā)送數(shù)據(jù)報(bào);
3)調(diào)用recvfrom()等待服務(wù)器進(jìn)程返回該處理結(jié)果;
4)客戶進(jìn)程調(diào)用close()撤消套接字。
4.FLASH存儲(chǔ)芯片簡(jiǎn)介
Flash是存儲(chǔ)芯片的一種,通過特定的程序可以修改里面的數(shù)據(jù)。Flash在電子以及半導(dǎo)體領(lǐng)域內(nèi)往往表示Flash Memory的意思,即平時(shí)所說的“閃存”,全名叫Flash EPPROM Memory。它結(jié)合了ROM和RAM的長處,不僅具備電子可擦除可編程的性能,還可以快速讀取數(shù)據(jù),使數(shù)據(jù)不會(huì)因?yàn)閿嚯姸鴣G失。目前Flash主要有兩種NORFlash和NANDFlash。NORFlash的讀取和我們常見的SDRAM的讀取時(shí)一樣的,用戶可以直接運(yùn)行裝載在NORFlash里面的代碼,這樣可以減少SRAM的容量從而節(jié)約了成本。NANDFlash沒有采取內(nèi)存的隨機(jī)讀取技術(shù),它的讀取是以一次讀取一塊的形式來進(jìn)行的,通常是一次讀取512個(gè)字節(jié),采用這種技術(shù)的Flash比較廉價(jià)。用戶不能直接運(yùn)行NANDFlash上的代碼,因此好多使用NANDFlash的開發(fā)板除了使用NANDFlash以外,還加上了一塊小的NORFlash來運(yùn)行啟動(dòng)代碼。一般小的容量的用NORFlash,因?yàn)槠渥x取速度快,多用來存儲(chǔ)操作系統(tǒng)等重要信息,而大容量的用NANDFlash,最常見的NANDFlash應(yīng)用時(shí)嵌入式系統(tǒng)采用的DOC和我們通常用的“閃盤”,可以在線擦除。
5.固化工具實(shí)現(xiàn)
固化工具分為兩大部分,PC端和目標(biāo)機(jī)端。PC端采用VC環(huán)境,提供可操作的界面,負(fù)責(zé)加載參數(shù)的解析填寫和向目標(biāo)機(jī)端發(fā)送加載數(shù)據(jù)。目標(biāo)機(jī)端采用C語言編寫,最終固化在嵌入式設(shè)備的FLASH中,主要負(fù)責(zé)加載數(shù)據(jù)的接收和數(shù)據(jù)的FLASH固化操作。
具體的固化流程如圖1所示,首先PC端和目標(biāo)機(jī)端分別進(jìn)行初始化,創(chuàng)建一個(gè)基于Socket的連接。接下來PC端解析獲取加載的參數(shù)等信息,通過調(diào)用sendto接口,將信息附加在數(shù)據(jù)包頭中隨加載數(shù)據(jù)一同發(fā)送至目標(biāo)機(jī)端。而目標(biāo)機(jī)端在初始化完成后則調(diào)用recvfrom接口進(jìn)行等待操作,當(dāng)收到PC端發(fā)送的數(shù)據(jù)包后進(jìn)行解析處理,調(diào)用FLASH芯片的相關(guān)驅(qū)動(dòng)接口將數(shù)據(jù)固化在相應(yīng)的FLASH地址空間。固化操作完成后向PC端返回處理結(jié)果,PC端繼續(xù)發(fā)送下一包數(shù)據(jù),如此反復(fù)直到所有數(shù)據(jù)發(fā)送完畢,全部固化在FLASH中。
圖1 固化流程圖
數(shù)據(jù)傳輸固化只是最基本的功能,工具還有其他一些拓展功能,比如固化文件信息的記錄和顯示、固化數(shù)據(jù)的回傳、固化數(shù)據(jù)的CRC校驗(yàn)等,在這里不一一贅述。
6.結(jié)束語
本文通過介紹基于UDP協(xié)議的Socket通信機(jī)制和FLASH存儲(chǔ)介質(zhì)的基本特性,在此基礎(chǔ)上實(shí)現(xiàn)了一款PC端到目標(biāo)機(jī)端的固化工具,保證固化數(shù)據(jù)有序可靠的固化至目標(biāo)極端。
參考文獻(xiàn)
[1]周坤,傅德勝.基于Windows Socket 的網(wǎng)絡(luò)數(shù)據(jù)傳輸及其安全[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(22):5381-5386.
[2]夏靖波.Windows 網(wǎng)絡(luò)程序設(shè)計(jì)[M].西安:電子科技大學(xué)出版,2006.
[3]于宗光,何耀宇.閃速存儲(chǔ)器的研究與進(jìn)展[J].1999,24, 5:1-7.
作者簡(jiǎn)介:張鋯(1988—),男,陜西西安人,主要研究方向:計(jì)算機(jī)科學(xué)與技術(shù)。