




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
河北聯(lián)合大學(xué)課程設(shè)計(jì)報(bào)告Linux高級(jí)開(kāi)發(fā)課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)題目:Linux下基于socket的文件傳輸程序設(shè)計(jì)學(xué)院:_________________________________專(zhuān)業(yè)班級(jí):__________________________________年級(jí):_________________________________姓名:___________________________________學(xué)號(hào):___________________________________完成時(shí)間:_________年_________月__________日成績(jī):____________________________________指導(dǎo)教師:____________________________________
課程設(shè)計(jì)指導(dǎo)教師評(píng)定成績(jī)表項(xiàng)目分值優(yōu)秀(100>x≥90)良好(90>x≥80)中等(80>x≥70)及格(70>x≥60)不及格(x<60)評(píng)分參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)學(xué)習(xí)態(tài)度15學(xué)習(xí)態(tài)度認(rèn)真,科學(xué)作風(fēng)嚴(yán)謹(jǐn),嚴(yán)格保證設(shè)計(jì)時(shí)間并按任務(wù)書(shū)中規(guī)定的進(jìn)度開(kāi)展各項(xiàng)工作學(xué)習(xí)態(tài)度比較認(rèn)真,科學(xué)作風(fēng)良好,能按期圓滿(mǎn)完成任務(wù)書(shū)規(guī)定的任務(wù)學(xué)習(xí)態(tài)度尚好,遵守組織紀(jì)律,基本保證設(shè)計(jì)時(shí)間,按期完成各項(xiàng)工作學(xué)習(xí)態(tài)度尚可,能遵守組織紀(jì)律,能按期完成任務(wù)學(xué)習(xí)馬虎,紀(jì)律渙散,工作作風(fēng)不嚴(yán)謹(jǐn),不能保證設(shè)計(jì)時(shí)間和進(jìn)度技術(shù)水平與實(shí)際能力25設(shè)計(jì)合理、理論分析與計(jì)算正確,實(shí)驗(yàn)數(shù)據(jù)準(zhǔn)確,有很強(qiáng)的實(shí)際動(dòng)手能力、經(jīng)濟(jì)分析能力和計(jì)算機(jī)應(yīng)用能力,文獻(xiàn)查閱能力強(qiáng)、引用合理、調(diào)查調(diào)研非常合理、可信設(shè)計(jì)合理、理論分析與計(jì)算正確,實(shí)驗(yàn)數(shù)據(jù)比較準(zhǔn)確,有較強(qiáng)的實(shí)際動(dòng)手能力、經(jīng)濟(jì)分析能力和計(jì)算機(jī)應(yīng)用能力,文獻(xiàn)引用、調(diào)查調(diào)研比較合理、可信設(shè)計(jì)合理,理論分析與計(jì)算基本正確,實(shí)驗(yàn)數(shù)據(jù)比較準(zhǔn)確,有一定的實(shí)際動(dòng)手能力,主要文獻(xiàn)引用、調(diào)查調(diào)研比較可信設(shè)計(jì)基本合理,理論分析與計(jì)算無(wú)大錯(cuò),實(shí)驗(yàn)數(shù)據(jù)無(wú)大錯(cuò)設(shè)計(jì)不合理,理論分析與計(jì)算有原則錯(cuò)誤,實(shí)驗(yàn)數(shù)據(jù)不可靠,實(shí)際動(dòng)手能力差,文獻(xiàn)引用、調(diào)查調(diào)研有較大的問(wèn)題創(chuàng)新10有重大改進(jìn)或獨(dú)特見(jiàn)解,有一定實(shí)用價(jià)值有較大改進(jìn)或新穎的見(jiàn)解,實(shí)用性尚可有一定改進(jìn)或新的見(jiàn)解有一定見(jiàn)解觀念陳舊論文(計(jì)算書(shū)、圖紙)撰寫(xiě)質(zhì)量50結(jié)構(gòu)嚴(yán)謹(jǐn),邏輯性強(qiáng),層次清晰,語(yǔ)言準(zhǔn)確,文字流暢,完全符合規(guī)范化要求,書(shū)寫(xiě)工整或用計(jì)算機(jī)打印成文;圖紙非常工整、清晰結(jié)構(gòu)合理,符合邏輯,文章層次分明,語(yǔ)言準(zhǔn)確,文字流暢,符合規(guī)范化要求,書(shū)寫(xiě)工整或用計(jì)算機(jī)打印成文;圖紙工整、清晰結(jié)構(gòu)合理,層次較為分明,文理通順,基本達(dá)到規(guī)范化要求,書(shū)寫(xiě)比較工整;圖紙比較工整、清晰結(jié)構(gòu)基本合理,邏輯基本清楚,文字尚通順,勉強(qiáng)達(dá)到規(guī)范化要求;圖紙比較工整內(nèi)容空泛,結(jié)構(gòu)混亂,文字表達(dá)不清,錯(cuò)別字較多,達(dá)不到規(guī)范化要求;圖紙不工整或不清晰指導(dǎo)教師評(píng)定成績(jī):指導(dǎo)教師簽名:年月日
摘要線程(thread)技術(shù)早在60年代就被提出,但真正應(yīng)用線程到操作系統(tǒng)中去,是在80年代中期。為什么有了進(jìn)程的概念后,還要再引入線程呢?使用多線程到底有哪些好處?使用多線程的理由之一是和進(jìn)程相比,它是一種非常"節(jié)儉"的多任務(wù)操作方式。在Linux系統(tǒng)下,啟動(dòng)一個(gè)新的進(jìn)程必須分配獨(dú)立的地址空間,建立眾多的數(shù)據(jù)表來(lái)維護(hù)它的代碼段、堆棧段和數(shù)據(jù)段。而運(yùn)行于一個(gè)進(jìn)程中的多個(gè)線程,它們之間使用相同的地址空間,共享大部分?jǐn)?shù)據(jù),啟動(dòng)一個(gè)線程所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于進(jìn)程所花費(fèi)的空間,而且,線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間所需要的時(shí)間。使用多線程的理由之二是線程間方便的通信機(jī)制。對(duì)不同進(jìn)程來(lái)說(shuō),它們具有獨(dú)立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過(guò)通信的方式進(jìn)行,這種方式費(fèi)時(shí)且很不方便。由于同一進(jìn)程下的線程之間共享數(shù)據(jù)空間,所以一個(gè)線程的數(shù)據(jù)可以直接為其它線程所用,這樣快且方便。在計(jì)算機(jī)中,凡是提供服務(wù)的一方我們稱(chēng)為服務(wù)端(Server),而接受服務(wù)的另一方我們稱(chēng)作客戶(hù)端(Client)。不過(guò)客戶(hù)端及伺服端的關(guān)系不見(jiàn)得一定建立在兩臺(tái)分開(kāi)的機(jī)器上,提供服務(wù)的伺服端及接受服務(wù)的客戶(hù)端也有可能都在同一臺(tái)機(jī)器上,這樣在同一臺(tái)機(jī)器上就同時(shí)扮演伺服端及客戶(hù)端。線程間方便的通信機(jī)制可以使得在我們?cè)诜?wù)端和客戶(hù)端方便的進(jìn)行通信傳輸與各種操作,可以通過(guò)運(yùn)用多線程機(jī)制方便實(shí)現(xiàn)上傳、下載文件;增加、刪除用戶(hù);以及在服務(wù)端進(jìn)行文件的管理。關(guān)鍵字:多線程、socket通信、服務(wù)器和客戶(hù)端
·1設(shè)計(jì)要求這次課程設(shè)計(jì)的要求是在以Linux為內(nèi)核的操作系統(tǒng)下,實(shí)現(xiàn)多線程文件傳輸系統(tǒng)功能模塊。系統(tǒng)模塊分為服務(wù)器和客戶(hù)端兩部分,客戶(hù)端實(shí)現(xiàn)對(duì)文件的上傳、下載和查看服務(wù)器默認(rèn)路徑下的文件列表;服務(wù)器根據(jù)客戶(hù)端命令對(duì)文件進(jìn)行管理操作。多線程文件傳輸是一種一對(duì)多或者多對(duì)多的關(guān)系,一般是一個(gè)服務(wù)器對(duì)應(yīng)著多個(gè)客戶(hù)端。客戶(hù)端通過(guò)socket連接服務(wù)器,服務(wù)器要為客戶(hù)端創(chuàng)建一個(gè)單獨(dú)進(jìn)程(線程)監(jiān)聽(tīng)每個(gè)客戶(hù)端的請(qǐng)求。創(chuàng)建好連接之后文件就可以通過(guò)流的形式傳輸。linux內(nèi)核中為我們提供了兩種不同形式的讀寫(xiě)流,包括read()、write()和send()、recv()??蛻?hù)機(jī)對(duì)文件的查看指令也是通過(guò)流傳遞給服務(wù)器,服務(wù)器根據(jù)請(qǐng)求類(lèi)型返回不同相應(yīng)流。根據(jù)socket原理和特點(diǎn)繪畫(huà)出鏈接流程圖,將客戶(hù)機(jī)與服務(wù)器的相互通信劃分為不同的模塊,每個(gè)模塊負(fù)責(zé)獨(dú)立的功能項(xiàng)??蛻?hù)端連接服務(wù)器后輸入指令管理目錄下的文件,客戶(hù)端向服務(wù)器發(fā)送上傳、下載和查看請(qǐng)求,將文件下載到當(dāng)前路徑下,從當(dāng)前路徑下上傳文件給服務(wù)器,upload是上傳文件命令,格式為upload[上傳文件路徑]download是下載文命令,格式為download[下載文件路徑]list列出服務(wù)器的文件列表命令。
·2socket通信原理 國(guó)際標(biāo)準(zhǔn)化組織(ISO)在1978年提出開(kāi)放系統(tǒng)互連參考模型(OSI:opensysteminterconnectionreferencemode),該模型是設(shè)計(jì)和描述網(wǎng)絡(luò)通信的基本框架。OSI采用分層的額結(jié)構(gòu)化技術(shù)將通信網(wǎng)絡(luò)分為7層,從低到高為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層。 TCP/IP參考模型是由美國(guó)國(guó)防部創(chuàng)建,且發(fā)展至今最成功的通信協(xié)議模型,與OSI模型對(duì)應(yīng),它將網(wǎng)絡(luò)功能分為4層,包括網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,每一層都有對(duì)應(yīng)的協(xié)議。在傳輸層的主要協(xié)議是TCP協(xié)議和UDP協(xié)議。socket連接就是基于TCP協(xié)議。TCP是一種可靠地?cái)?shù)據(jù)傳輸協(xié)議。 socket是一種套接口,它把網(wǎng)絡(luò)地址和端口號(hào)信息放在一個(gè)結(jié)構(gòu)體中,也就是套接字地址結(jié)構(gòu)。 結(jié)構(gòu)圖如下: 套接口與ip、端口號(hào)的關(guān)系套接口與ip、端口號(hào)的關(guān)系套接口229999229999Ip地址端口號(hào) 通用套接口地址數(shù)據(jù)結(jié)構(gòu)定義在<sys/socket.h>頭文件中,形式如下: structsockaddr { uint8_tsa_len; sa_family_tsa_family; charsa_data[14]; }; IPv4套接口地址數(shù)據(jù)結(jié)構(gòu)以socketaddr_in命名,定義在<netinet/in.h>頭文件中,形式如下: structsocketaddr_in { unit8_tsin_len; sa_family_tsin_family; in_port_tsin_port; structin_addrsin_addr; unsignedcharsin_zero[8]; } 下圖是TCP套接口通信工作流程圖:
結(jié)束連接通知結(jié)束連接通知應(yīng)答信號(hào)服務(wù)請(qǐng)求三次握手過(guò)程掛起,直到有客戶(hù)機(jī)的連接請(qǐng)求Socket()客戶(hù)機(jī)進(jìn)程服務(wù)器進(jìn)程Bind()Listen()Accept()Recv()Send()Connect()Send()Recv()Close()Socket()Recv()TCP套接口通信工作過(guò)程通信工作的大致流程:服務(wù)器先用socket()函數(shù)來(lái)建立一個(gè)套接口,用這個(gè)套接口完成通信的監(jiān)聽(tīng)及數(shù)據(jù)的收發(fā)。服務(wù)器用bind()函數(shù)來(lái)綁定一個(gè)端口號(hào)和ip地址,是套接口與指定的端口號(hào)和ip關(guān)聯(lián)。服務(wù)器調(diào)用linsten()函數(shù),是服務(wù)器的端口和Ip處于監(jiān)聽(tīng)狀態(tài),等待網(wǎng)絡(luò)中某一個(gè)客戶(hù)機(jī)的連接請(qǐng)求??蛻?hù)機(jī)用socket()函數(shù)建立一個(gè)套接口,設(shè)定遠(yuǎn)程ip和端口客戶(hù)機(jī)調(diào)用connect()函數(shù)連接遠(yuǎn)程計(jì)算機(jī)指定的端口。服務(wù)器調(diào)用accept()函數(shù)來(lái)接受遠(yuǎn)程計(jì)算機(jī)的連接請(qǐng)求,建立起與客戶(hù)機(jī)之間的通信連接。建立連接之后,客戶(hù)機(jī)用write()函數(shù)(或send())想socket中寫(xiě)入數(shù)據(jù)。也可以用read()函數(shù)(或recv()函數(shù))賭氣服務(wù)器發(fā)送來(lái)的數(shù)據(jù)。服務(wù)器用read()函數(shù)(或recv()函數(shù))來(lái)讀取客戶(hù)機(jī)發(fā)來(lái)的數(shù)據(jù),也可以用write()函數(shù)(或send()函數(shù))來(lái)發(fā)送數(shù)據(jù)。完成通信以后,使用close()函數(shù)關(guān)閉socket連接。
·3詳細(xì)設(shè)計(jì)過(guò)程·3.1服務(wù)器端創(chuàng)建監(jiān)聽(tīng)與文件管理 ·3.2客戶(hù)端連接與文件傳輸 ·4結(jié)果演示·5實(shí)現(xiàn)代碼5.1服務(wù)器代碼 5.2客戶(hù)端代碼
6總結(jié)體會(huì)為期一周的Linux課程設(shè)計(jì)結(jié)束了,從中獲益匪淺。一方面是檢查了這一個(gè)學(xué)期來(lái)linux內(nèi)核編程學(xué)習(xí)成果,將書(shū)本的理論知識(shí)運(yùn)用到實(shí)踐中,另一方面在實(shí)踐中加深了對(duì)理論知識(shí)的理解,與此同時(shí)夠讓我們認(rèn)清自己在學(xué)習(xí)Socket編程方面的不足之處和薄弱環(huán)節(jié),并加以彌補(bǔ)和鞏固,通過(guò)對(duì)線程同步程序設(shè)計(jì),進(jìn)一步的鞏固用Socket編程的能力,并且也有利于更好的掌握C語(yǔ)言。例如在改寫(xiě)成tcp過(guò)程中對(duì)其他函數(shù)也要進(jìn)行相應(yīng)的修改。生成可執(zhí)行文件,無(wú)錯(cuò)誤后開(kāi)始運(yùn)行,但是不能連接,總是出錯(cuò)誤,然后繼續(xù)改正,最終發(fā)現(xiàn)錯(cuò)誤在sock創(chuàng)建主動(dòng)套接口轉(zhuǎn)為被動(dòng)時(shí)沒(méi)有運(yùn)用TCP流式套接字(SOCK_STREAM)。而且發(fā)現(xiàn)tcp有專(zhuān)用函數(shù)listen(),其僅被TCP服務(wù)器調(diào)用,將sock創(chuàng)建的主動(dòng)套接口轉(zhuǎn)換為被動(dòng)套接口,TCP使用send()函數(shù)發(fā)送數(shù)據(jù)。從編程中體會(huì)頗多,學(xué)到了很多東西,懂得了怎樣建立TCP套接字以及加鎖解鎖和條件變量的作用。也懂得了網(wǎng)絡(luò)通信中服務(wù)器需要循環(huán)等待客戶(hù)端連接進(jìn)來(lái),然后創(chuàng)立一個(gè)單獨(dú)的線程來(lái)監(jiān)聽(tīng)該客戶(hù)端的行為動(dòng)作。同時(shí)加強(qiáng)了我對(duì)TCP/IPSocket編程這門(mén)課程的認(rèn)識(shí),并且也復(fù)習(xí)了以前學(xué)習(xí)到的知識(shí),自己的邏輯思維能力也得到了一定的提高。通過(guò)這次課程設(shè)計(jì),懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論知識(shí)與實(shí)踐相結(jié)合,從理論中得出結(jié)論,才是真正的知識(shí),才能提高自己的事跡動(dòng)手能力和獨(dú)立思考的能力?!?/p>
參考文獻(xiàn)[1](美)RoberLove《LinuxKernelDevelopment》(ThirdEdition)機(jī)械工業(yè)出
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 咋樣寫(xiě)供貨合同范本
- 發(fā)改ppp合同范本
- 買(mǎi)賣(mài)銅幣合同范本
- 可再生能源項(xiàng)目合同范本
- 品牌股權(quán)合同范本
- 啟東農(nóng)田流轉(zhuǎn)合同范本
- 廠房帶門(mén)面裝修合同范本
- 寫(xiě)抖音合同范例
- 買(mǎi)房簽意向合同范例
- 動(dòng)物實(shí)驗(yàn)合同范本
- 國(guó)際合規(guī)要求與企業(yè)管理
- 巖腳煤礦智能化綜采工作面匯報(bào)材料2020.11.10.11.10
- 餐廳每日清潔計(jì)劃
- 數(shù)據(jù)湖構(gòu)建及應(yīng)用場(chǎng)景
- 切格瓦拉完整
- 高考小說(shuō)閱讀強(qiáng)化訓(xùn)練:孫犁小說(shuō)專(zhuān)題(附答案解析)
- 向云端二聲部五線正譜
- 部編版六年級(jí)下冊(cè)道德與法治全冊(cè)表格式教學(xué)設(shè)計(jì)
- 兵團(tuán)歷史與兵團(tuán)精神課件
- 人民醫(yī)院能源托管服務(wù)項(xiàng)目可研技術(shù)方案書(shū)
評(píng)論
0/150
提交評(píng)論