基于Linux的socket_多客戶多文件傳輸系統(tǒng)_第1頁
基于Linux的socket_多客戶多文件傳輸系統(tǒng)_第2頁
基于Linux的socket_多客戶多文件傳輸系統(tǒng)_第3頁
基于Linux的socket_多客戶多文件傳輸系統(tǒng)_第4頁
基于Linux的socket_多客戶多文件傳輸系統(tǒng)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、摘 要 線程(thread)技術(shù)早在60年代就被提出,但真正應(yīng)用線程到操作系統(tǒng)中去。使用多線程的理由之一是和進(jìn)程相比,它是一種非常"節(jié)儉"的多任務(wù)操作方式。在Linux系統(tǒng)下,啟動一個(gè)新的進(jìn)程必須分配獨(dú)立的地址空間,建立眾多的數(shù)據(jù)表來維護(hù)它的代碼段、堆棧段和數(shù)據(jù)段。而運(yùn)行于一個(gè)進(jìn)程中的多個(gè)線程,它們之間使用相同的地址空間,共享大部分?jǐn)?shù)據(jù),啟動一個(gè)線程所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于進(jìn)程所花費(fèi)的空間,而且,線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間所需要的時(shí)間。  使用多線程的理由之二是線程間方便的通信機(jī)制。對不同進(jìn)程來說,它們具有獨(dú)立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過通信的方

2、式進(jìn)行,這種方式費(fèi)時(shí)且很不方便。由于同一進(jìn)程下的線程之間共享數(shù)據(jù)空間,所以一個(gè)線程的數(shù)據(jù)可以直接為其它線程所用,這樣快且方便。  在計(jì)算機(jī)中,凡是提供服務(wù)的一方我們稱為服務(wù)端(Server),而接受服務(wù)的另一方我們稱作客戶端(Client)。不過客戶端及伺服端的關(guān)系不見得一定建立在兩臺分開的機(jī)器上,提供服務(wù)的伺服端及接受服務(wù)的客戶端也有可能都在同一臺機(jī)器上,這樣在同一臺機(jī)器上就同時(shí)扮演伺服端及客戶端。  線程間方便的通信機(jī)制可以使得在我們在服務(wù)端和客戶端方便的進(jìn)行通信傳輸與各種操作,可以通過運(yùn)用多線程機(jī)制方便實(shí)現(xiàn)上傳、下載文件;增加、刪除用戶;以及在服務(wù)端進(jìn)行文件的管理。&

3、#160; 本文介紹了基于TCP/IP協(xié)議的客戶端和服務(wù)器通信的基礎(chǔ)上,在Linux的環(huán)境對套接口進(jìn)行編程,實(shí)現(xiàn)了雙客戶間的通信.關(guān)鍵字:雙客戶通信;Linux;TCP/IP協(xié)議;Socket套接口;I/O復(fù)用AbstractThread (thread) technology as early as in the 1960s have been proposed, but the real application threads to go to the operating system. One of the reasons is the use of multiple threads a

4、nd processes compared to, it is a very "frugal" multitasking operating mode. In the Linux system, start a new process must be assigned a separate address space, the establishment of a large number of data tables to maintain its code segment, stack and data segments. While running on a proc

5、ess of multiple threads between them using the same address space, shared most of the data, the space it takes to start a thread process takes far less than the space, and, switching between threads each required time is far less than the time required for inter-process.Reason two is the use of mult

6、iple threads to facilitate inter-thread communication mechanisms. Different processes, they have separate data space, the data to be transmitted only by way of communicating, consuming and inconvenient in this way. Because the shared data space between threads of the same process under a thread so t

7、hat data can be used directly by other threads, so quick and easy.In the computer, all serving one we call the server (Server), and served other we call the client (Client). But the relationship between the client and the servo end not necessarily build on two separate machines, servo end service de

8、livery and client services received may also be in the same machine, so that on the same machine at the same time to play on the servo end and client.Convenient communication mechanism between threads so that we can facilitate the conduct of the service and client communication transmission with a v

9、ariety of operations, it can easily achieve upload and download files through the use of multi-threading mechanism; add, delete users; as well as server-side for file management.This article introduces the basic client and server communications over TCP / IP protocol, in Linux the socket programming

10、 environment to achieve the dual communication between customers.Keywords: double customer communications; Linux; TCP / IP protocol; Socket socket; I / O multiplexing目 錄第一章 緒 論41.1 前言41.2 嵌入式系統(tǒng)發(fā)展41.3 Linux系統(tǒng)71.4 本章小結(jié)7第二章 總體結(jié)構(gòu)設(shè)計(jì)82.1 需求分析82.2 設(shè)計(jì)方式82.3 實(shí)現(xiàn)功能92.4系統(tǒng)結(jié)構(gòu)圖92.5本章小結(jié)9第三章 設(shè)計(jì)詳解103.1 設(shè)計(jì)原理103.2 套接口函

11、數(shù)113.3 TCP的連接113.4 socket通信原理123.5 通信工作的流程:12第四章 設(shè)計(jì)步驟及結(jié)果144.1嵌入式ARM-Linux環(huán)境建立144.2 Arm-Linux交叉編譯工具鏈的建立144.3 NFS網(wǎng)絡(luò)文件系統(tǒng)的建立154.1 服務(wù)器創(chuàng)建164.2 客戶端連接164.3 基本步驟164.4 運(yùn)行結(jié)果18參考文獻(xiàn)19第一章 緒 論1.1 前言嵌入式系統(tǒng)是一種專用的計(jì)算機(jī)系統(tǒng),作為裝置或設(shè)備的一部分。通常,嵌入式系統(tǒng)是一個(gè)控制程序存儲在ROM中的嵌入式處理器控制板。事實(shí)上,所有帶有數(shù)字接口的設(shè)備,如手表、微波爐、錄像機(jī)、汽車等,都使用嵌入式系統(tǒng),有些嵌入式系統(tǒng)還包含操作系統(tǒng)

12、,但大多數(shù)嵌入式系統(tǒng)都是由單個(gè)程序?qū)崿F(xiàn)整個(gè)控制邏輯。從應(yīng)用對象上加以定義,嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機(jī)械等附屬裝置。國內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義為:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式設(shè)計(jì)是企業(yè)電子產(chǎn)品設(shè)計(jì)的重要組成,目前國內(nèi)外中小型企業(yè)內(nèi)部都建立了自己的嵌入式開發(fā)團(tuán)隊(duì)。團(tuán)隊(duì)所需的人員職位構(gòu)成包括:(1)系統(tǒng)設(shè)計(jì)工程師 (2)硬件工程師 (3)底層驅(qū)動工程師 (4)Linux系統(tǒng)工程師 (5)應(yīng)用設(shè)計(jì)工程師等。對于企業(yè)而言,嵌入式開發(fā)越來越朝著敏捷開發(fā)、專業(yè)操作的方向發(fā)展。國內(nèi)也逐步涌現(xiàn)出

13、一些專門定制開發(fā)電子產(chǎn)品、進(jìn)行嵌入式外包的專業(yè)公司。對于企業(yè)而言,隨時(shí)關(guān)注嵌入式承載硬件的發(fā)展尤其重要,尤其是ARM、FPGA、MCU的結(jié)構(gòu)、工藝、速度正在經(jīng)歷著不斷的變革。一個(gè)嵌入式系統(tǒng)裝置一般都由嵌入式計(jì)算機(jī)系統(tǒng)和執(zhí)行裝置組成,嵌入式計(jì)算機(jī)系統(tǒng)是整個(gè)嵌入式系統(tǒng)的核心,由硬件層、中間層、系統(tǒng)軟件層和應(yīng)用軟件層組成。執(zhí)行裝置也稱為被控對象,它可以接受嵌入式計(jì)算機(jī)系統(tǒng)發(fā)出的控制命令,執(zhí)行所規(guī)定的操作或任務(wù)。1.2 嵌入式系統(tǒng)發(fā)展從20世紀(jì)七十年代單片機(jī)的出現(xiàn)到各式各樣的嵌入式微處理器,微控制器的大規(guī)模應(yīng)用,嵌入式系統(tǒng)已經(jīng)有了近30年的發(fā)展歷史。 嵌入式系統(tǒng)的出現(xiàn)最初是基于單片機(jī)的。70

14、年代單片機(jī)的出現(xiàn),使得汽車、家電、工業(yè)機(jī)器、通信裝置以及成千上萬種產(chǎn)品可以通過內(nèi)嵌電子裝置來獲得更佳的使用性能:更容易使用、更快、更便宜。這些裝置已經(jīng)初步具備了嵌入式的應(yīng)用特點(diǎn),但是這時(shí)的應(yīng)用只是使用8位的芯片,執(zhí)行一些單線程的程序,還談不上“系統(tǒng)”的概念。嵌入式系統(tǒng)的發(fā)展現(xiàn)狀:進(jìn)入20世紀(jì)90年代后,嵌入式技術(shù)全面展開,目前已成為通信和消費(fèi)類產(chǎn)品的共同發(fā)展方向。在通信領(lǐng)域,數(shù)字技術(shù)正在全面取代模擬技術(shù)。在廣播電視領(lǐng)域,美國已開始由模擬電視向數(shù)字電視轉(zhuǎn)變,歐洲D(zhuǎn)VB(數(shù)字電視廣播)技術(shù)已在全球大多數(shù)國家推廣。而軟件、集成電路和新型元器件在產(chǎn)業(yè)發(fā)展中的作用日益重要,如維納斯計(jì)劃生產(chǎn)機(jī)頂盒,其核心

15、技術(shù)就是采用32位以上芯片級的嵌入式技術(shù)。在個(gè)人領(lǐng)域中,嵌入式產(chǎn)品將主要是個(gè)人商用,作為個(gè)人移動的數(shù)據(jù)處理和通訊軟件。當(dāng)前中國嵌入式系統(tǒng)市場上的熱點(diǎn)應(yīng)用有4:消費(fèi)電子、安全防務(wù)、電子商務(wù)、物流管理等安全防務(wù):近年來,安防界收益最大的就是嵌入式系統(tǒng),安防產(chǎn)品進(jìn)入嵌入化發(fā)展階段后,從傳統(tǒng)的門禁、攝像頭、錄像機(jī),逐漸過渡到以嵌入式系統(tǒng)為基礎(chǔ)的網(wǎng)絡(luò)化設(shè)備,如網(wǎng)絡(luò)攝像頭、硬盤錄像機(jī)、網(wǎng)絡(luò)數(shù)據(jù)采集器等。 2.3電子商務(wù)、物流管理  針對目前的物流企業(yè)、商店、商場、超市等,通過一些小、中型嵌入式設(shè)備,很方便地完成商品信息的錄入、獲取等,如條碼掃描、移動信息采集等,減少了大量的人

16、力、物力、財(cái)力。 自動控制:人們生活中經(jīng)常使用的ATM機(jī)、自動售貨機(jī)、GPS、與娛樂結(jié)合的嵌入式產(chǎn)品、工業(yè)控制和移動通訊設(shè)備結(jié)合產(chǎn)品等,嵌入式系統(tǒng)簡直是無處不在,發(fā)揮作用巨大。近期長虹推出的ADSL產(chǎn)品將結(jié)合網(wǎng)絡(luò)、控制、信息,實(shí)現(xiàn)智能化、網(wǎng)絡(luò)化。 汽車智能化:隨著基于CPU的汽車電子設(shè)備要求電源提供多變化電壓和更強(qiáng)的功能,對電源管理要求更高,對電子設(shè)備顯示屏更大、分辨率更高、體積更小,所有這些都將需要高集成度、高性能、高效率和低功耗的電源管理,還要盡量消除汽車開關(guān)電源對敏感電路的干擾。 電力系統(tǒng)管理:電力系統(tǒng)中,變電站點(diǎn)多面廣,同時(shí)要求現(xiàn)代化管理,很多都是無人值班

17、變電站,基于嵌入式網(wǎng)絡(luò)服務(wù)器的設(shè)備配置管理技術(shù)能夠減輕設(shè)備運(yùn)行人員的勞動,使設(shè)備管理部門能夠及時(shí)了解變電站運(yùn)行信息,對設(shè)備故障的處理也更加快速有效,伴隨著國家電網(wǎng)的發(fā)展,基于嵌入式網(wǎng)絡(luò)服務(wù)器的設(shè)備維護(hù),將比以往基于遠(yuǎn)程撥號的維護(hù)方式更加優(yōu)越。未來嵌入式系統(tǒng)的發(fā)展趨勢:信息時(shí)代、數(shù)字時(shí)代使得嵌入式產(chǎn)品獲得了巨大的發(fā)展契機(jī),為嵌入式市場展現(xiàn)了美好的前景,同時(shí)也對嵌入式生產(chǎn)廠商提出了新的挑戰(zhàn),未來嵌入式系統(tǒng)的發(fā)展趨勢有:  系統(tǒng)工程化:嵌入式開發(fā)是一項(xiàng)系統(tǒng)工程,因此要求嵌入式系統(tǒng)廠商不僅要提供嵌入式軟硬件系統(tǒng)本身,同時(shí)還需要提供強(qiáng)大的硬件開發(fā)工具和軟件包支持。目前很多廠商已經(jīng)充分

18、考慮到這一點(diǎn),在主推系統(tǒng)的同時(shí),將開發(fā)環(huán)境也作為重點(diǎn)推廣。比如三星在推廣ARM7,ARM9芯片的同時(shí)還提供開發(fā)板和板級支持包(BSP),而WindowCE在主推系統(tǒng)時(shí)也提供Embedded VC作為開發(fā)工具,還有Vxworks的Tonado開發(fā)環(huán)境,DeltaOS的Limda編譯環(huán)境等等。 功能多樣化:隨著因特網(wǎng)技術(shù)的成熟、帶寬日益提高,使以往的設(shè)備功能不再單一,結(jié)構(gòu)更加復(fù)雜,如電話、手機(jī)等。同時(shí)要求芯片設(shè)計(jì)廠商在芯片上集成更多的功能,滿足應(yīng)用功能的升級,一方面采用更強(qiáng)大的嵌入式處理器,如32位、64位RISC芯片或信號處理器DSP增強(qiáng)處理能力,同時(shí)增加功能接口,如USB,

19、擴(kuò)展總線類型,如CAN BUS,加強(qiáng)對多媒體、圖形等的處理,逐步實(shí)施片上系統(tǒng)(SOC)的概念。軟件方面采用實(shí)時(shí)多任務(wù)編程技術(shù)和交叉開發(fā)工具技術(shù)來控制功能復(fù)雜性,簡化應(yīng)用程序設(shè)計(jì)、保障軟件質(zhì)量和縮短開發(fā)周期。      網(wǎng)絡(luò)化:未來嵌入式設(shè)備為了適應(yīng)網(wǎng)絡(luò)發(fā)展的要求,必然要在硬件上提供各種網(wǎng)絡(luò)通信接口。新一代的嵌入式處理器已經(jīng)開始內(nèi)嵌網(wǎng)絡(luò)接口,支持TCP/IP協(xié)議、IEEE1394、USB、CAN、Bluetooth或IrDA通信接口中的一種或幾種,同時(shí)提供相應(yīng)的通信組網(wǎng)協(xié)議軟件和物理層驅(qū)動軟件。軟件方面系統(tǒng)內(nèi)核支持網(wǎng)絡(luò)模塊,甚

20、至可以在設(shè)備上嵌入Web瀏覽器,實(shí)現(xiàn)隨時(shí)隨地上網(wǎng)。精簡系統(tǒng)內(nèi)核、降低功耗和軟硬件成本 未來的嵌入式產(chǎn)品是軟硬件緊密結(jié)合的設(shè)備,為了降低功耗和成本,需要盡量精簡系統(tǒng)內(nèi)核,只保留和系統(tǒng)功能緊密相關(guān)的軟硬件,利用最少的資源實(shí)現(xiàn)最適當(dāng)?shù)墓δ?,選用最佳的編程模型和不斷改進(jìn)算法,優(yōu)化編譯器性能。因此,既要軟件人員有豐富的硬件知識,又需要發(fā)展先進(jìn)嵌入式軟件技術(shù),如Java、Web和WAP等。      交互友好化:嵌入式設(shè)備能與用戶親密接觸,最重要的因素就是它能提供友好的用戶界面、圖像界面、靈活的控制方式、對專業(yè)知識要求低,甚至不需要嵌入

21、式的知識就能讓人們很快、很容易掌握嵌入式產(chǎn)品的使用方法,因此未來嵌入式系統(tǒng)需要更高的可交互性和高度抽象化。1.3 Linux系統(tǒng)Linux操作系統(tǒng)是多用戶、多任務(wù)的操作系統(tǒng),具有強(qiáng)大的可移植性、良好地編程環(huán)境和強(qiáng)大的網(wǎng)絡(luò)工程。Linux操作系統(tǒng)是一個(gè)免費(fèi)的操作系統(tǒng),由于Linux是由Linus開發(fā)的,故以Linuxs UNIX命名,簡稱Linux。 Linux內(nèi)核是Linux的主體,內(nèi)核負(fù)責(zé)控制硬件設(shè)備、文件系統(tǒng)和程序任務(wù)調(diào)度等工作,但不包括用戶程序。因?yàn)長inux內(nèi)核是免費(fèi)的,用戶與廠商可自行配置應(yīng)用程序。Linux內(nèi)核是Linux的主體,內(nèi)核負(fù)責(zé)控制硬件設(shè)備、文件系統(tǒng)和

22、程序任務(wù)調(diào)度等工作,但不包括用戶程序。因?yàn)長inux內(nèi)核是免費(fèi)的,用戶與廠商可自行配置應(yīng)用程序。Linux作為一個(gè)現(xiàn)代的操作系統(tǒng),正在各個(gè)方面得到廣泛的應(yīng)用。Linux在服務(wù)器、嵌入式等方面已經(jīng)取得不俗的成績,在桌面系統(tǒng)方面,也逐漸受到歡迎。于是Linux的安全問題也逐漸受到人們的重視。現(xiàn)在Linux已經(jīng)在全球廣泛普及開來,雖然在個(gè)人桌面版方面還遜色于Microsoft Windows系統(tǒng),但在服務(wù)器領(lǐng)域以其良好的安全性和穩(wěn)定性得到越來越多用戶的認(rèn)可,并被廣泛使用由于Linux操作系統(tǒng)可在多種操作系統(tǒng)上運(yùn)行,支持多平臺,所以得到了廣泛應(yīng)用。1.4 本章小結(jié)本章主要介紹了嵌入式的特點(diǎn)及

23、發(fā)展,并給出了嵌入式系統(tǒng)之一的Linux系統(tǒng)簡介,對于初步了解嵌入式系統(tǒng)有很好的引導(dǎo)作用。第二章 總體結(jié)構(gòu)設(shè)計(jì)2.1 需求分析這次課程設(shè)計(jì)的要求是在以Linux為內(nèi)核的操作系統(tǒng)下,實(shí)現(xiàn)多線程文件傳輸系統(tǒng)功能模塊。系統(tǒng)模塊分為服務(wù)器和客戶端兩部分,客戶端實(shí)現(xiàn)對文件的上傳、下載和查看服務(wù)器默認(rèn)路徑下的文件列表;服務(wù)器可以對文件進(jìn)行管理操作,包括創(chuàng)建、刪除和重命名等。多線程文件傳輸是一種一對多或者多對多的關(guān)系,一般是一個(gè)服務(wù)器對應(yīng)著多個(gè)客戶端??蛻舳送ㄟ^socket連接服務(wù)器,服務(wù)器要為客戶端創(chuàng)建一個(gè)單獨(dú)進(jìn)程(線程)監(jiān)聽每個(gè)客戶端的請求。創(chuàng)建好連接之后文件就可以通過流的形式傳輸。linux內(nèi)核中為我

24、們提供了兩種不同形式的讀寫流,包括read()、write()和send()、recv()??蛻魴C(jī)對文件的查看指令也是通過流傳遞給服務(wù)器,服務(wù)器根據(jù)請求類型返回不同相應(yīng)流。 根據(jù)socket原理和特點(diǎn)繪畫出鏈接流程圖,將客戶機(jī)與服務(wù)器的相互通信劃分為不同的模塊,每個(gè)模塊負(fù)責(zé)獨(dú)立的功能項(xiàng)。服務(wù)器輸入指令管理目錄下的文件,create filename是創(chuàng)建文件命令,rename oldname newname是刪除文命令,delete filename 是刪除文件命令,同時(shí)監(jiān)聽著客戶端的請求;客戶端向服務(wù)器發(fā)送上傳、下載和查看請求,從而

25、得到不同的相應(yīng),包括將文件下載到當(dāng)前路徑下,從當(dāng)前路徑下上傳文件給服務(wù)器,列出服務(wù)器的文件列表。2.2 設(shè)計(jì)方式大多數(shù)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)可以分為兩部分:客戶(client)和服務(wù)器(server),它們通過TCP/IP協(xié)議進(jìn)行信息的傳輸。通過套接口編寫使用TCP或UDP的網(wǎng)絡(luò)應(yīng)用程序便可以實(shí)現(xiàn)不同的功能。 在簡單的回射服務(wù)程序中,通過捕獲信號SIGCHLD來處理僵尸進(jìn)程;但由于客戶阻塞于等待用戶輸入,當(dāng)服務(wù)進(jìn)程被終止時(shí),客戶并不能立即收到信息。通過基于select函數(shù)及poll函數(shù)的I/O復(fù)用技術(shù),我們可以做到:當(dāng)條件滿足(如輸入設(shè)備已被讀、描述字可以承受更多的輸出),就能被通知并采取行

26、到,而不是被動等待。如此,程序不但簡潔、時(shí)效性高,而且充分利用了資源。 基于以上的技術(shù),編寫出了雙客戶通信程序,功能有二:一客戶能發(fā)送信息,接收信息;二服務(wù)器能將客戶信息進(jìn)行傳輸。 2.3 實(shí)現(xiàn)功能客戶1從標(biāo)準(zhǔn)輸入寫入一行文本到服務(wù)器上,服務(wù)器從網(wǎng)絡(luò)輸入讀此行,客戶2讀此回射行標(biāo)準(zhǔn)輸出,客戶1也實(shí)現(xiàn)回射標(biāo)準(zhǔn)輸出。2.4系統(tǒng)結(jié)構(gòu)圖系統(tǒng)結(jié)構(gòu)如圖1:主程序ServeClient發(fā)送交互信息客戶連接處理解析客戶請求協(xié)議圖1系統(tǒng)結(jié)構(gòu)圖2.5本章小結(jié)本章主要介紹了設(shè)計(jì)的需求分析和設(shè)計(jì)方法,并給出了設(shè)計(jì)的總體框架,實(shí)現(xiàn)的預(yù)期目標(biāo)等。第三章 設(shè)計(jì)詳解3.1 設(shè)計(jì)原理在Linux系統(tǒng)上的網(wǎng)絡(luò)通信可分成

27、客戶和服務(wù)器兩部分,它們通過通信鏈路進(jìn)行相互鏈接,服務(wù)器通過派生子進(jìn)程可以同時(shí)處理多個(gè)客戶的請求。如下圖1為雙客戶信息傳輸程序流程圖??蛻?通過fgets()函數(shù)接受鍵盤輸入數(shù)據(jù),通過writen()函數(shù)發(fā)送數(shù)據(jù)到服務(wù)器;服務(wù)器將接受到的數(shù)據(jù)轉(zhuǎn)發(fā)給客戶2;客戶2通過readlin()函數(shù)讀取服務(wù)器數(shù)據(jù),并通過fputs()函數(shù)將數(shù)據(jù)顯示屏幕上。圖2 雙客戶信息傳輸程序流程圖所用的TCP模型是Richard Stevens編著的UNIX網(wǎng)絡(luò)編程中的I/O復(fù)用模型,調(diào)用通過select函數(shù)來處理套接口可讀和標(biāo)準(zhǔn)輸入可讀,表現(xiàn)為對相應(yīng)的文件描述符的處理。FD_SETSIZE是文件描述符的最大個(gè)數(shù),一

28、般為1024,原則上說除去標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、錯(cuò)誤輸出和監(jiān)聽,還有1000個(gè)可以用來描述客戶的已連接套接字。服務(wù)器通信協(xié)議為TCP,地址為IPv4,先是socket()產(chǎn)生監(jiān)聽套接字,并用bind()綁定端口。接著進(jìn)行監(jiān)聽,并用accept()建立連接,連接完成會生成“已連接套接字”。接著調(diào)用select()來處理不同的事件,用rset這個(gè)描述符集來記錄建立的描述符數(shù),并用client這個(gè)數(shù)組記錄不同客戶建立的連接描述符值。最后便是對建立的描述符數(shù)組進(jìn)行輪詢,按照不同狀態(tài)處理。客戶端就只需socket()和connect(),即可建立“已連接套接字”。接著進(jìn)行文件描述符和套接字描述符的測試,如

29、果標(biāo)準(zhǔn)輸入可讀就讀入并寫到套接口,套接口可讀就讀入并寫到標(biāo)準(zhǔn)輸出。3.2 套接口函數(shù)一個(gè)完整的TCP客戶及服務(wù)器程序是需要一系列基本套接口函數(shù)來支持的,下面可以看到這些函數(shù)相互配合,搭建了網(wǎng)絡(luò)通信程序的各個(gè)環(huán)節(jié)。3.3 TCP的連接TCP通過三路握手來達(dá)到連接,下面是它們的步驟:A服務(wù)器必須準(zhǔn)備好接受外來的連接,可以通過調(diào)用socket、bind和listen等函數(shù)完成,稱為被動打開; B客戶通過調(diào)用connect進(jìn)行主動打開。這引起客戶TCP發(fā)送一個(gè)SYN分節(jié)(表示同步),它告訴服務(wù)器客戶在連接中發(fā)送的數(shù)據(jù)的初始序列號。一般情況下SYN分節(jié)不攜帶數(shù)據(jù),它只含一個(gè)IP頭部、一個(gè)TCP

30、頭部及可能有的TCP選項(xiàng)。 C服務(wù)必須確認(rèn)客戶的SYN,同時(shí)自己也得發(fā)送一個(gè)SYN分節(jié),它含有服務(wù)器將在同一連接中發(fā)送數(shù)據(jù)的初始序列號。服務(wù)器以單個(gè)分節(jié)向客戶發(fā)送SYN核對客戶SYN的ACK。D客戶必須確認(rèn)服務(wù)器的SYN。圖3 三路握手建立TCP同步連接3.4 socket通信原理國際標(biāo)準(zhǔn)化組織(ISO)在1978年提出開放系統(tǒng)互連參考模型(OSI:open system interconnection reference mode),該模型是設(shè)計(jì)和描述網(wǎng)絡(luò)通信的基本框架。OSI采用分層的額結(jié)構(gòu)化技術(shù)將通信網(wǎng)絡(luò)分為7層,從低到高為物理

31、層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。 TCP/IP參考模型是由美國國防部創(chuàng)建,且發(fā)展至今最成功的通信協(xié)議模型,與OSI模型對應(yīng),它將網(wǎng)絡(luò)功能分為4層,包括網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,每一層都有對應(yīng)的協(xié)議。在傳輸層的主要協(xié)議是TCP協(xié)議和UDP協(xié)議。 socket連接就是基于TCP協(xié)議。TCP是一種可靠地?cái)?shù)據(jù)傳輸協(xié)議。 socket是一種套接口,它把網(wǎng)絡(luò)地址和端口號信息放在一個(gè)結(jié)構(gòu)體中,也就是套接字地址結(jié)構(gòu)。結(jié)構(gòu)圖如下圖3所示:圖4 套接口與ip、端口號的關(guān)系3.5 通信工作的流程:1)服務(wù)器先用socket()函數(shù)來建立一個(gè)套接口,用這

32、個(gè)套接口完成通信的監(jiān)聽及數(shù)據(jù)的收發(fā)。 2)服務(wù)器用bind()函數(shù)來綁定一個(gè)端口號和ip地址,是套接口與指定的端口號和ip關(guān)聯(lián)。 3)服務(wù)器調(diào)用linsten()函數(shù),是服務(wù)器的端口和Ip處于監(jiān)聽狀態(tài),等待網(wǎng)絡(luò)中某一個(gè)客戶機(jī)的連接請求。 4)客戶機(jī)用socket()函數(shù)建立一個(gè)套接口,設(shè)定遠(yuǎn)程ip和端口 5) 客戶機(jī)調(diào)用connect()函數(shù)連接遠(yuǎn)程計(jì)算機(jī)指定的端口。 6)服務(wù)器調(diào)用accept()函數(shù)來接受遠(yuǎn)程計(jì)算機(jī)的連接請求,建立起與客戶機(jī)之間的通信連接。 7)建立連接之后,客戶機(jī)用write()函數(shù)(或send())想

33、socket中寫入數(shù)據(jù)。也可以用read()函數(shù)(或recv()函數(shù))賭氣服務(wù)器發(fā)送來的數(shù)據(jù)。 8)服務(wù)器用read()函數(shù)(或recv()函數(shù))來讀取客戶機(jī)發(fā)來的數(shù)據(jù),也可以用write()函數(shù)(或send()函數(shù))來發(fā)送數(shù)據(jù)。 9) 完成通信以后,使用close()函數(shù)關(guān)閉socket連接。TCP套接口通信工作流程圖:圖5 TCP 套接口通信工作過程第四章 設(shè)計(jì)步驟及結(jié)果4.1嵌入式ARM-Linux環(huán)境建立絕大多數(shù)的軟件開發(fā)都是本機(jī)開發(fā)、調(diào)試,本機(jī)運(yùn)行的方式進(jìn)行,但是這種方式不適合于嵌入式系統(tǒng)的軟件開發(fā),因?yàn)閷τ谇度胧较到y(tǒng)的開發(fā),它沒有足夠的資源在本機(jī)運(yùn)行開

34、發(fā)工具和調(diào)試工具。因此在宿主機(jī)上搭建一個(gè)好的開發(fā)環(huán)境是很關(guān)鍵的一步,它的成敗直接影響下一步的進(jìn)展。根據(jù)需求分析確定了系統(tǒng)的開發(fā)環(huán)境是嵌入式Linux操作系統(tǒng)。根據(jù)需求分析和嵌入式系統(tǒng)結(jié)構(gòu),得出了系統(tǒng)所需的系統(tǒng)結(jié)構(gòu)如圖3-1所示。圖6 系統(tǒng)結(jié)構(gòu)圖實(shí)現(xiàn)步驟如下:(1)Arm-Linux交叉開發(fā)環(huán)境的建立; (2)嵌入式Arm-Linux的裁剪和移植:其中包括啟動加載程序U-Boot的移植以及內(nèi)核的裁剪、移植、文件系統(tǒng)的制作; (3)SDL的研究和編碼實(shí)現(xiàn); (4)應(yīng)用程序的移植并測試。4.2 Arm-Linux交叉編譯工具鏈的建立  與主

35、流軟件開發(fā)相同,嵌入式系統(tǒng)開發(fā)同樣需要用到編譯器、鏈接器、解釋程序、集成開發(fā)環(huán)境以及諸如此類的開發(fā)工具。但是在嵌入式系統(tǒng)開發(fā)中,由于執(zhí)行應(yīng)用程序的平臺(目標(biāo)機(jī))與創(chuàng)建應(yīng)用程序的平臺(宿主機(jī))并不兼容,因此,需要交叉開發(fā)工具進(jìn)行交叉編譯。本文采用工具鏈Arm-none-linux-gnueabi-創(chuàng)建Arm-Linux交叉編譯環(huán)境。建立過程如下: (1)登錄Linux操作系統(tǒng),然后再/home/farsight目錄下新建toolchain目錄;     (2)將工具鏈toolchains_for_s3c2410.tar.bz2復(fù)制到以上

36、toolchain目錄下,并執(zhí)行解壓; (3)在宿主機(jī)中設(shè)置環(huán)境變量使得系統(tǒng)能自動調(diào)用已建立好的工具,具體的設(shè)置方法為:在根目錄中打開/etc/profile文件添加交叉編譯環(huán)境。具體設(shè)置方vi /etc/profile,在文件的最后加上:export PATH=$PATH: /home/farsight/toolchain/bin最后保存退出,在終端輸入source /etc/profile即可生效,在終端輸入arm-none按Tabs鍵即可提示得到該交叉編譯工具的名稱。4.3 NFS網(wǎng)絡(luò)文件系統(tǒng)的建立NFS網(wǎng)絡(luò)文件系統(tǒng)可以使得系統(tǒng)調(diào)試開發(fā)更容易進(jìn)行,只需要將經(jīng)

37、過交叉編譯器編譯之后生成的可執(zhí)行文件通過NFS掛載到板子上為調(diào)試做好準(zhǔn)備,避免反復(fù)的燒寫可執(zhí)行文件到FLASH中15,造成時(shí)間浪費(fèi)和FlASH壽命的縮短。(1)安裝NFS server端口映射和服務(wù),首先需要下載相應(yīng)的包,接著進(jìn)行端口的映射,其命令如下:$ sudo apt-get install nfs-kernel-server nfs-common portmap $ sudo dpkg-reconfigure portmap,執(zhí)行完后,在出現(xiàn)提示的時(shí)候,選定“不將 p

38、ortmap綁定在 loopback 地址”; (2)通過查看/etc/default/portmap,確保#OPTIONS="-i 127.0.0.1"前面的#號被添加了,重啟portmap服務(wù):$ sudo /etc/init. d/portmap restart;(3)編輯/etc/exports文件,添加目標(biāo)系統(tǒng)的根文件系統(tǒng)映射目錄,此時(shí)需要將目標(biāo)系統(tǒng)的根文件系統(tǒng)最后映射到/opt/filesytem,在/etc/exports文件的最后添加如下內(nèi)容:/opt/filesystem  *(subt

39、ree_check,rw,no_root_squash,async) (4)重啟NFS服務(wù),并更新,其執(zhí)行的命令為:$ sudo /etc/init.d/nfs-kernel-server restart,接著進(jìn)行的操作為:$ sudo exportfs a,執(zhí)行完后此時(shí)就基本上可以實(shí)現(xiàn)NFS服務(wù); (5)測試NFS服務(wù),將主機(jī)上的共享目錄mount到自己另外一個(gè)目錄下,如:mount 192.168.0.125:/home/farsight/toolchain /mnt,然后查看/mnt目錄下是否有/home/farsigh/toolchain目錄下的文件,如果有的話,則NFS服務(wù)啟動成功。4.1 服務(wù)器創(chuàng)建服務(wù)器負(fù)責(zé)的功能模塊主要有兩部分,一是對連接進(jìn)來客戶端所有線程的管理和服務(wù)器目錄下的文件管理;二是創(chuàng)建線程來單獨(dú)監(jiān)聽客戶端的動作。為了便于管理,我們創(chuàng)建兩個(gè)serve.txt和client.txt兩

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論