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