版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 2014屆畢業(yè)設(shè)計(jì)說明書 基于linux操作系統(tǒng)的聊天軟件的設(shè)計(jì) 學(xué) 院: 電氣與信息工程學(xué)院 學(xué)生姓名: 指導(dǎo)教師: 職稱 講師 專 業(yè): 電子信息工程 班 級(jí): 電子1002班 完成時(shí)間: 2014年5月 摘 要 這篇論文整體是在linux下并通過網(wǎng)絡(luò)實(shí)現(xiàn)類似于qq的的一篇操作報(bào)告。開發(fā)的框是c/s框架,由server端和client端組成,首先設(shè)置好端口參數(shù)和ip地址,在編譯,調(diào)試后實(shí)現(xiàn)server端與各個(gè)client端的連接,連接后以后server端作為中間端來使客戶機(jī)實(shí)現(xiàn)通訊,因?yàn)榉?wù)器只存在一個(gè)但是客戶端存在多個(gè)所以我們必須通過鏈表去管理,client端的信息發(fā)送通過封裝在soc
2、ket結(jié)構(gòu)體中進(jìn)行傳輸。本設(shè)計(jì)采用tcp/ip協(xié)議這樣可以保證連接可靠,而且項(xiàng)目管理中釆用linux流行的gcc和makefile編譯,大大提高了編譯和調(diào)試效率,提高了項(xiàng)目完成的效率,但是為了模擬幾個(gè)client端我們就需要在pc機(jī)上再安裝一個(gè)虛擬系統(tǒng)來操作client端。本次設(shè)計(jì)的聊天通信使用全雙工,主要實(shí)現(xiàn)了功能如:用戶的帳號(hào)與密碼的注冊(cè)與登錄,客戶點(diǎn)對(duì)點(diǎn)聊天,客戶之間的群聊,以及文件的發(fā)送與接收。測(cè)試運(yùn)行后的可靠性滿足linux網(wǎng)絡(luò)聊天的基本要求。關(guān)鍵詞:linux, socket, ,server端,client端,網(wǎng)絡(luò)編程 abstract this thesis as a whol
3、e is under linux platform and through the local area network to achieve similar qq chat. the overall use of c / s framework, the main server -side and client into two parts , set ip and port number , and linux, compile and debug procedures to achieve client and server connections each client side ,
4、and then as the server -side following transfer to achieve communication between client end . since only one server -side , and you can have multiple client end , so the server side using a single list to manage multiple client side information , client side encapsulated for transmission of informat
5、ion sent through the body in the socket structure . this design uses the tcp / ip protocol ,so you can ensure reliable connection, but also preclude the use of project management in a popular linux gcc and makefile to compile, compile and debug greatly improved efficiency , improve the efficiency of
6、 the completion of the project, but due to simulate multiple client end therefore, in the operating environment need to install a virtual system on the pc to operate multiple client side . the chat tool designed for full-duplex communication using communication , to achieve the five main functions:
7、to-peer chat between new user registration and login, user , group chat among users , file encryption transmission between users. after running the test program to meet the basic needs of network reliability in linux in chat .keywords : linux, socket, server -side , client end , network programming
8、目 錄 1 緒 論11.1 課題研究的背景及意義11.2 tcp/ip介紹21.3 本文的研究內(nèi)容42 技術(shù)說明與方案選擇52.1通信方式52.1.1 udp通信52.1.2 tcp通信52.2客戶/服務(wù)器模型62.3網(wǎng)絡(luò)套接字(socket)的概念72.4多線程的概念72.5i/o多路復(fù)用83 系統(tǒng)實(shí)現(xiàn)113.1 linux提供的有關(guān)socket的系統(tǒng)調(diào)用113.2 實(shí)驗(yàn)過程說明(使用tcp/ip)133.3 tcp通信實(shí)現(xiàn)144 運(yùn)行效果29結(jié)束語34致謝35參考文獻(xiàn)36附錄a 服務(wù)器程序38附錄b 客戶端程序47 1 緒 論 1.1 課題研究的背景及意義隨著計(jì)算機(jī)應(yīng)用技術(shù)的日益普及,網(wǎng)絡(luò)
9、也遍及到我們生活的每個(gè)角落,很好的利用這一資源,將成為我們工作和學(xué)習(xí),帶來極大的方便。并且可以極高的提高我們的工作效率。所以,各種聊天軟件應(yīng)運(yùn)而生了。如國外的msn等,國內(nèi)主要的有騰訊的qq,還有ticq和一些在網(wǎng)頁上的即時(shí)通訊工具,像chinaren網(wǎng)站上的webmaster等等,都做得即美觀又強(qiáng)大,騰訊的qq有非常大的用戶群。這些網(wǎng)絡(luò)聊天軟件極大程度上方便了處于在世界各地的友人之間的聯(lián)系,無論你和親人、朋友相隔多遠(yuǎn),你都可以隨時(shí)隨地和他們交流。并且,你還可以和外國友人交流學(xué)習(xí)。在網(wǎng)絡(luò)發(fā)展上,最早出現(xiàn)的是分布在很大的地理范圍內(nèi)的遠(yuǎn)程網(wǎng)絡(luò)(wideareanetwork,wan),例如美國國防
10、部高級(jí)研究計(jì)劃局首先研制的 arpa 網(wǎng),它從 1969 年建立,至今已經(jīng)發(fā)展成為跨越幾大洲的巨型網(wǎng)絡(luò)。70 年代中期由于微型計(jì)算機(jī)的出現(xiàn)和微處理器的出現(xiàn),以及短程通訊技術(shù)的迅猛發(fā)展,兩者相輔相成,又促進(jìn)以微機(jī)為基礎(chǔ)的各種局域網(wǎng)絡(luò)(local area network,lan)的飛快發(fā)展,1975 年美國 xerox 公司首先推出了 ethernet,與此時(shí)英國劍橋大學(xué)研制成劍橋環(huán)網(wǎng),他們是 lan 的代表。lan 與 wan 有所區(qū)別,其特點(diǎn)為:1)有限的地理范圍,通常網(wǎng)內(nèi)的計(jì)算機(jī)限于一棟大樓,樓群或一個(gè)企業(yè)及單位。2)較高的通訊速率,大多在每秒 1-100m bps ,而 wan 大多在幾
11、十 kbps。3)通訊介質(zhì)多樣。4)通常為一個(gè)部門所擁有。特別是 80 年代以來,以微機(jī)為基礎(chǔ),lan 技術(shù)有了極其迅速的發(fā)展。90 年代計(jì)算機(jī)網(wǎng)絡(luò)化大趨勢(shì)尤為明顯。具稱 1978 年全世界約有 700 萬人每天使用計(jì)算機(jī),而到 1998 年上升到 5000 萬人,目前全世界已經(jīng)擁有超過一億臺(tái)的計(jì)算機(jī),預(yù)計(jì)每天上機(jī)人數(shù)可達(dá) 2 億以上。計(jì)算機(jī)的性能價(jià)格比以每年 25%的速度在提高。微機(jī)的應(yīng)用已經(jīng)滲透到國民經(jīng)濟(jì)的各個(gè)部門,乃至家庭和個(gè)人。這標(biāo)志著正步入信息時(shí)代,世界范圍內(nèi)的社會(huì)信息數(shù)據(jù)正在每年增長 40%到 45%的年增長率在增加,這就是迫切實(shí)現(xiàn)網(wǎng)絡(luò)化的動(dòng)力源泉。據(jù)稱,約有 65%的計(jì)算機(jī)要聯(lián)網(wǎng)
12、或已經(jīng)聯(lián)網(wǎng),以求彼此通信,達(dá)到資源共享的目標(biāo)。90 年代計(jì)算機(jī)網(wǎng)絡(luò)化更加向深度和廣度方向發(fā)展。人們要求網(wǎng)絡(luò)傳輸?shù)膬?nèi)容范圍增加,諸如數(shù)據(jù)之外,還需傳輸聲音,圖形,圖象和文字,這就是以網(wǎng)絡(luò)為基礎(chǔ)的多媒體技術(shù),使網(wǎng)絡(luò)的應(yīng)用廣度更加擴(kuò)大,并最終為信息化社會(huì)的實(shí)現(xiàn)所必須的網(wǎng)絡(luò)連接奠定基礎(chǔ)。當(dāng)前國際 lan 的市場(chǎng)上,兩雄稱霸,龍爭(zhēng)虎斗的局面,將可能持續(xù)相當(dāng)長一段時(shí)間。正如大家知道的那樣,80 年代后期美國 novell 公司先是以“一花獨(dú)秀,壓倒群芳”之勢(shì)占據(jù)了國際 lan 市場(chǎng) 60%以上,一路領(lǐng)先,扶搖直上,尤其是 netware 386 v3.11 版推出后,受到普遍的注目;隨后,國際上的軟件公司
13、龍頭老大 microsoft 公司先后推出了lan manager v1.0(即 lan 3+ open)、lan manager v2.0 和 v2.1,后來居上,成為世界lan 的兩大支柱之一。1992 年 10 月 microsoft 又搶先發(fā)布了 lan managerv2.2,以更加領(lǐng)先于 novell 的 netware 386 v3.11,但后者立即隨后推出了 netware 4.0??梢姟褒垹?zhēng)虎斗”,瓜分市場(chǎng)的情景。novel lan 采取了“將網(wǎng)絡(luò)協(xié)議軟件與網(wǎng)絡(luò)操作系統(tǒng) netware 緊密結(jié)合起來”的設(shè)計(jì)構(gòu)想,可達(dá)到節(jié)省開銷,提高運(yùn)行效率之目標(biāo)。novell lan 最大的
14、特點(diǎn)是與其底層的網(wǎng)卡的無關(guān)性,即是說 netware 可以虛擬的在所有流行的 lan 上面運(yùn)行,使它成為一個(gè)理想的開發(fā)網(wǎng)絡(luò)應(yīng)用軟件的平臺(tái),吸引了廣大用戶軟件人員為之開發(fā)越來越多的網(wǎng)絡(luò)應(yīng)用軟件。反過來又推動(dòng)其發(fā)展,同時(shí) novell lan 采取了開放協(xié)議技術(shù)(opt),允許各種網(wǎng)絡(luò)協(xié)議緊密結(jié)合,進(jìn)而在 netware 386 v3.11 版中采用了 nlm 模塊的組合技術(shù),可以實(shí)現(xiàn)異機(jī)種聯(lián)網(wǎng)的難題。此外,novell lan 不需專用服務(wù)器,占用工作站內(nèi)存最小,使用方便,功能強(qiáng),效率高,兼容性強(qiáng),可靠性高,保密性強(qiáng),容錯(cuò)性好。尤其在 netware 386 v3.11版中實(shí)現(xiàn)了服務(wù)器軟件的“分
15、布式結(jié)構(gòu)策略”、“橫向信息共享”、“報(bào)文傳送”技術(shù)、增添了“tcp/ip ?!?、實(shí)現(xiàn)了“sna 協(xié)議”和“開放式數(shù)據(jù)鏈路接口”等一系列新技術(shù),使 novelllan 更深入人心,擴(kuò)大了市場(chǎng)。與此同時(shí),微軟的lan manager v2.1和v2.2局域網(wǎng)版除了有一般的基礎(chǔ)的優(yōu)點(diǎn),還應(yīng)用了“客戶機(jī)服務(wù)器”(client/server)的強(qiáng)大內(nèi)網(wǎng)絡(luò)體系結(jié)構(gòu),以及基于多用戶,多任務(wù)并發(fā)先進(jìn)的 os/2 作為服務(wù)器,并以 os/2,unix, vms 和 windows nt 作為系統(tǒng)的開發(fā)平臺(tái),更方便與異類機(jī)種訪問網(wǎng)絡(luò)。由于 lan manager與 windows 的聯(lián)系;使它有更高的的性格比。在
16、網(wǎng)絡(luò)化技術(shù)飛速發(fā)展的今天,tcp/ip 協(xié)議可謂是立下了汗馬功勞。起先,tcp/ip(transmission control protocol/internet protocol)是由美國國防部于 70 年代提出來的,將中大型機(jī)連成的網(wǎng)絡(luò)互連起來,并按 tcp/ip 協(xié)議這種模式實(shí)現(xiàn)異網(wǎng)之間通訊,接著美國國防部高級(jí)計(jì)劃局(darpa)于 70 年代末提出了幾種國際互連(internet)技術(shù)。這些技術(shù)實(shí)現(xiàn)了在科學(xué)研究,軍事和社會(huì)生活迫切需要共享的資料。題1.2 tcp/ip介紹transmission control protocol/internet protocol的簡(jiǎn)寫,中譯名為傳輸控
17、制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是internet最基本的協(xié)議,internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的ip協(xié)議和傳輸層的tcp協(xié)議組成。tcp/ip 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求。通俗而言:tcp負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鴌p是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。(1) 協(xié)議優(yōu)勢(shì)在社會(huì)長期的發(fā)展過程中,ip逐步取代了其余的網(wǎng)絡(luò)。這是一個(gè)簡(jiǎn)單的解釋。ip傳輸通用數(shù)據(jù)。數(shù)據(jù)能夠用于任何目的,并且能夠很輕易地
18、取代以前由專有數(shù)據(jù)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)。(2)協(xié)議的缺點(diǎn)第一,協(xié)議在服務(wù),接口方面的區(qū)分不明確。好的軟件工程在功能與實(shí)現(xiàn)上面是有明確的區(qū)分的,tcp/ip沒有很好地做到這點(diǎn)。第二,主機(jī)-網(wǎng)絡(luò)層本身并不是實(shí)際的一層,它定義了網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層的接口。1.3 linux介紹 linux是一種開源的操作系統(tǒng),它擁有像windows和mac那樣的功能齊全的ui界面(gui,graphical user interface)。linus torvald。作為一種很棒的操作系統(tǒng),它具有與unix,mac,windows和windows nt相似的的功能,但是其中又會(huì)有不同的地方。 提到linux我們一定要知道g
19、nu和unix。richard m.stallman創(chuàng)建的自由軟件聯(lián)盟推出了兩種許可證,gnu是通用公共許可證(gnu gneral public license,gpl)和gnu函數(shù)庫通用公共許可證(gnu library gneral public license,lgpl)。除了一些庫是以gnu函數(shù)庫通用公共許可證發(fā)行的,其他基本上gnu工程的軟件和文檔是以gnu通用公共許可證為基礎(chǔ)發(fā)布的。按照gnu的相關(guān)規(guī)定,linux的源代碼可以在網(wǎng)上免費(fèi)自由獲取,這一點(diǎn)為我們學(xué)習(xí)者提供了極大的方便。gpl極大的體現(xiàn)了stallman的思想:只要用戶所做的修改是有利于系統(tǒng)發(fā)展的,用戶可以自由地使用、
20、拷貝、查詢、重用、修改也可以發(fā)布這個(gè)修改后的軟件。就這樣gpl保證了linux的優(yōu)點(diǎn)不僅現(xiàn)在自由可用,而且經(jīng)過修改后的系統(tǒng)都仍然可以自由使用。 unix是由att貝爾實(shí)驗(yàn)室的ken thompson和dennis ritchie在已經(jīng)廢棄了的pdp-7上開發(fā)的在1969年;剛開始它是一個(gè)僅用用匯編語言單編寫的一個(gè)建議的單用戶用戶操作系統(tǒng)。后來,又在pdp-11上用c語言重新編寫系統(tǒng),把unix做成為了一個(gè)文本處理系統(tǒng),這樣極大的促進(jìn)了unix在貝爾實(shí)驗(yàn)室得的使用。unix的最初版本不收費(fèi)的供應(yīng)給眾多的大學(xué)的計(jì)算機(jī)系去使用。加州大學(xué)伯克利分校的計(jì)算機(jī)系就是在這眾多的大學(xué)中,并對(duì)unix進(jìn)行了完善
21、并且增加了許多新的特點(diǎn),這就是被廣大的開發(fā)者所熟知的的bsc版本的unix。在這個(gè)事間的同時(shí),很多其他的的unix版本也開始萌生。unix不斷發(fā)展壯大,許多版本被應(yīng)用到不同類型的的計(jì)算機(jī)使用。而linux最初就是專門為intel的個(gè)人計(jì)算機(jī)設(shè)計(jì)的。(1)linux的昨天 1991年,一名叫l(wèi)inus torvalds的芬蘭大學(xué)生覺得unix各種版本對(duì)于一個(gè)類型的機(jī)器的兼容性比較差(80386類的機(jī)器),于是他決定要開發(fā)出一個(gè)全功能的、并且支持posix標(biāo)準(zhǔn)的、類似于unix的操作系統(tǒng)的系統(tǒng)內(nèi)核,該系統(tǒng)取得了bsd和system v 的精華,同進(jìn)去除了它們的糟粕。他將內(nèi)核開發(fā)到了0.02版,這個(gè)
22、版本中已經(jīng)可以運(yùn)行g(shù)cc、bash和其他少量的應(yīng)用程序。后來他在英特網(wǎng)的幫助下在在1994年將linux升級(jí)到1.0版本。它的源代碼量也呈指數(shù)形式迅速增長,實(shí)現(xiàn)了基本的tcp/ip功能,在此同時(shí)大約有100000用戶開始使用linux操作系統(tǒng)了,linux系統(tǒng)開始被廣大的用戶所認(rèn)可。(2) linux的今天 作為服務(wù)器級(jí)的操作系統(tǒng),在廣大的開發(fā)者的共同努力下linux操作系統(tǒng)已經(jīng)非常成熟了。現(xiàn)在的linux內(nèi)核集成了150萬多行代碼,不僅可以作為web服務(wù)器平臺(tái),而且也為越來越多的用戶提供文件和打印服務(wù)。它既被當(dāng)作郵件服務(wù)器的一種候選平臺(tái),也被當(dāng)作一種強(qiáng)壯而安全的防火墻。 linux的企業(yè)級(jí)特
23、性:linux系統(tǒng)不僅支持多處理器、支持大型文件系統(tǒng)、日志文件系統(tǒng)而且在密集型計(jì)算和高可用性集群技術(shù)上面也逐步成熟。 現(xiàn)在的linux的ui界面也在繼續(xù)完善。kde桌面提供的圖形用戶界面在易用性和可配置方面和微軟的windows不相上下。(3) linux的明天 linux最強(qiáng)大的生命力在于其開源。每學(xué)習(xí)者都有可以輕松自由的獲取內(nèi)核源代碼,每個(gè)人都可以運(yùn)載源程序并對(duì)其加以修改,而后的他人也可以自由獲取你修改后的源程序。集市模型就是為linux這種獨(dú)特的自由流暢的開發(fā)模型已被命名。集市模型是通過重視實(shí)驗(yàn)征集和充分利用早期的反饋,通過平衡的配置腦力資源,從而開發(fā)出更優(yōu)秀的軟件。 1.4 本文的研究
24、內(nèi)容本課題的任務(wù)是設(shè)計(jì)一個(gè)支持多人群聊以及用戶間私聊和文件傳送的聊天系統(tǒng)。首先服務(wù)器會(huì)初始化,然后等待客戶端的連接。每連接一個(gè)客戶端就簡(jiǎn)歷一個(gè)線程去監(jiān)聽客戶端請(qǐng)求??蛻舳耸亲?cè)好了的,只需要登陸。客戶端注冊(cè)成功會(huì)把客戶端信息保存到鏈表和文件中。注銷時(shí)會(huì)把對(duì)應(yīng)的鏈表節(jié)點(diǎn)銷毀,并且刪除文件對(duì)應(yīng)信息。當(dāng)有多個(gè)客戶端登陸時(shí),客戶端界面會(huì)顯示其他用戶的用戶名??梢詫?shí)現(xiàn)用鍵選擇,然后按回車鍵進(jìn)入與其的私聊界面。然后可以和其進(jìn)行私聊和文件傳送。而好友界面的倒數(shù)第二個(gè)為群聊選擇,當(dāng)進(jìn)入群聊時(shí),可以實(shí)現(xiàn)多人同時(shí)聊天。另外,如果其他人下線時(shí)。你的顯示好友界面里的那個(gè)客戶端就會(huì)消失,同時(shí),有人上線時(shí),會(huì)在好友欄加上
25、新加的客戶端。最后一個(gè)選項(xiàng)是退出,銷毀對(duì)應(yīng)線程及文件描述符。 2 技術(shù)說明與方案選擇 2.1 通信方式2.1.1 udp通信 udp是用戶數(shù)據(jù)報(bào)協(xié)議的簡(jiǎn)稱。udp在傳送數(shù)據(jù)之前不需要先建立連接,遠(yuǎn)地主機(jī)的傳輸層在收到udp數(shù)據(jù)后,不能給出任何確認(rèn)信息,所以不能保證其交付時(shí)信息的可靠性。它的特點(diǎn)是:無連接,不能提供的可靠的信道,但正是因?yàn)闊o連接這個(gè)特點(diǎn)使udp具有很好的傳輸效率。2.1.2 tcp通信 tcp是傳輸控制協(xié)議的簡(jiǎn)稱,tcp可以提供一條全雙工的、可靠的信道。tcp在數(shù)據(jù)傳送之前必須先建立相應(yīng)的連接,數(shù)據(jù)傳送完成后必須釋放連接。但是tcp不能提供廣播和多播這些信息服務(wù)。 正是因?yàn)閠cp
26、要提供可靠的、面向連接的運(yùn)輸?shù)榷鄻拥姆?wù),所以增加了額外的系統(tǒng)開銷,例如確認(rèn)、流量的控制、計(jì)時(shí)器以及連接管理等服務(wù)都需要消耗許多系統(tǒng)資源。 如果計(jì)算機(jī)之間使用通信方式是tcp通信,則計(jì)算機(jī)之間的連接過程需要三次握手實(shí)現(xiàn),如下圖1-1所示。 圖1-1 用三次握手建立tcp連接 對(duì)于計(jì)算機(jī)連接的釋放過程也需要類似的3次握手的互相確認(rèn)的過程,如實(shí)驗(yàn)圖1-2所示。 圖1-2 tcp連接的釋放過程通過以上兩種方案的比較,考慮適用性,本次課題我選擇了選擇tcp通信協(xié)議。2.2 c/s模型c/s模型將應(yīng)用程序分為server端和client端兩基本的部分,client端對(duì)server端發(fā)送請(qǐng)求,server
27、端對(duì)其作出相應(yīng)的回應(yīng)并開始提供服務(wù)。在tcp/ip應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用c/s模型設(shè)計(jì)的。server端一直處于等待狀態(tài),當(dāng)一個(gè)client端提出請(qǐng)求時(shí)。server端馬上會(huì)根據(jù)client端發(fā)送的請(qǐng)求從而執(zhí)行對(duì)應(yīng)操作以至于達(dá)到server端的要求。通常,c/s模型必須包含兩個(gè)獨(dú)立的應(yīng)用程序:client端和server端的應(yīng)用程序。在c/s模型中,多個(gè)在同樣的內(nèi)網(wǎng)中的計(jì)算機(jī)都作為client端,與端口號(hào)和ip進(jìn)行連接,并通過server端傳遞信息。所以client端的通信既可以理解為client端和server端之間的通信。所以采用c/s模型進(jìn)行網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)需要分別編寫clie
28、nt端和server端的源代碼,client端和server端之間相互通信的程序流程如實(shí)驗(yàn)圖1-3所示。 圖1-3 socket通信流程圖2.3 網(wǎng)絡(luò)套接字(socket)的概念socket接口是tcp/ip的api,它提供了相應(yīng)的功能函數(shù)與例程,我們可以使用對(duì)應(yīng)的函數(shù)與例程進(jìn)行tcp/ip應(yīng)用程序的開發(fā)與維護(hù)。使用socket套接字進(jìn)行網(wǎng)絡(luò)通信的開發(fā)過程如下面的步驟:(1) 建立一個(gè)socket套接字(2) 按我們所需要的要求配置好socket套接字,將socket連接到遠(yuǎn)程server端或者是本機(jī)server端或給socket套接字指定本地協(xié)議端口號(hào)。(3) 按要求通過socket套接字發(fā)
29、送和接受相應(yīng)的數(shù)據(jù)與信息。(4) 完成通信以后我們需要關(guān)閉此socket套接字并且釋放相應(yīng)的其他銷耗系統(tǒng)的操作。以上就是通過socket套接字來實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)信息通信的4個(gè)編程的核心要點(diǎn)。2.4 系統(tǒng)的選擇方案一:紅帽子系統(tǒng)即red ha系統(tǒng)是目前銷售量最高、安裝最簡(jiǎn)便、最適合初學(xué)者的linux發(fā)行版,也是目前世界上最流行的linux發(fā)行套件,它的市場(chǎng)營銷、包裝及服務(wù)做的相當(dāng)不錯(cuò),自行開發(fā)了rpm套件管理程序及x桌面環(huán)境gnome的眾多軟件并將其源代碼回饋給open source community。也正是因?yàn)閞ed hat的方便性,安裝程序?qū)⑾到y(tǒng)的構(gòu)架或軟件安裝方式全部做了包裝,用戶學(xué)到的都是g
30、ui界面(圖形用戶界面)上輸入一些設(shè)置值的粗淺知識(shí),至于軟件安裝了那些文件、安裝到哪個(gè)文件目錄、系統(tǒng)作了哪些設(shè)置,使用者則一無所知,一旦真正遇到系統(tǒng)程序發(fā)生問題時(shí),要解決問題也就比較困難。方案二:caldera openlinux系統(tǒng),caldera將openlinux這套系統(tǒng)定位為容易使用與設(shè)置的發(fā)行版,以集成使用環(huán)境與最終用戶辦公環(huán)境,容易安裝使用與簡(jiǎn)便管理為系統(tǒng)目標(biāo),有望成為最流行的公司團(tuán)體臺(tái)式linux操作系統(tǒng),適合初學(xué)者使用,全部安裝需要1gb的硬盤空間。caldera有自行研發(fā)的圖形界面的安裝程序向?qū)?,安裝過程可以玩俄羅斯方塊,提供完整的kde桌面環(huán)境,附贈(zèng)功能強(qiáng)大的商業(yè)軟件,如s
31、taroffice、圖形界面的硬盤分割工具partition magic等。方案三:suse linux系統(tǒng),suse是歐洲最流行的linux發(fā)行版,而且suse是軟件國際化的先驅(qū),讓軟件支持各國語系,貢獻(xiàn)頗豐,suse也是用rpm作為軟件安裝管理程序,不過suse并不適合新手使用,提供了非常多的工具軟件,全部安裝需4.5gb的硬盤空間,安裝過程也較為復(fù)雜。通過以上三種方案的比較,考慮適用性,和可操作性,選擇red hat linux 操作系統(tǒng)。2.5 開發(fā)工具的選擇方案一:vi編輯器,vi編輯器是linux上最基本的文本編輯器,它是以字符模式為核心的。由于去除了ui界面,使vi編輯器效率提高
32、了很多。在linux上也有許多ui界面的編輯器,但vi在系統(tǒng)和服務(wù)器管理中的相應(yīng)的功能是ui編輯器不可以達(dá)到的。vi編輯器在linux上的重要性是與edit在dos上的地位是一樣。vi編輯器可以執(zhí)行文字輸出、文字刪除、文字查找、文字替換、文件塊操作等眾多文本操作,用戶也可以根據(jù)自身的需要對(duì)其進(jìn)行相應(yīng)的定制和二次開發(fā),這是其他編輯程序所不能達(dá)到的效果。加上紅帽子系統(tǒng)中自帶的gcc編譯器和gdb調(diào)試工具,所以linux系統(tǒng)目前最主流的開發(fā)工具。方案二:用eclipse 加cdt+gcc+gdb,雖然eclipse 擁有方便的ui界面,配置開發(fā)環(huán)境有點(diǎn)復(fù)雜,如果配置好了,開發(fā)的效率還是不錯(cuò)的。和在w
33、indows下開發(fā)基本相似。用eclipse+cdt可以自動(dòng)生成makefile文件,比較適合偏愛圖形界面的開發(fā)人員。通過以上兩種方案的比較,考慮適用性,和編程習(xí)慣,選擇方案一。 2.6 多線程與多進(jìn)程點(diǎn)對(duì)點(diǎn)通信的實(shí)現(xiàn)知識(shí),了解了主機(jī)進(jìn)程與服務(wù)器進(jìn)程之間的連接關(guān)系,建立連接了一對(duì)一的進(jìn)程聯(lián)系,即主機(jī)的一個(gè)進(jìn)程必須與服務(wù)器的一個(gè)進(jìn)程之間建立相應(yīng)的連接。而對(duì)于每一個(gè)client端服務(wù)器都要建立一個(gè)相應(yīng)的進(jìn)程去實(shí)現(xiàn)和client端的通信。 對(duì)于線程的并發(fā)情況我們就要建立多個(gè)線程去出來。由于服務(wù)端接受信息的行為是被動(dòng)的,當(dāng)服務(wù)端沒有信息可以接收時(shí),該進(jìn)程就應(yīng)該自動(dòng)的阻塞,發(fā)送任務(wù)也應(yīng)該一起被阻塞。不同
34、端口的收發(fā)之間就存在并發(fā)情況,這樣我們就應(yīng)該應(yīng)該建立多個(gè)不同的進(jìn)程去分別完成信息的收發(fā)。這樣,當(dāng)一個(gè)client端的請(qǐng)求被阻塞時(shí),不至于影響其它的client端的正常工作。關(guān)于多進(jìn)程和多線程,我覺得最核心的一句話是“進(jìn)程是資源分配的最小單位,線程是cpu調(diào)度的最小單位”。方案一:多進(jìn)程,數(shù)據(jù)共享非常復(fù)雜,需要用ipc處理;數(shù)據(jù)是分開處理的,同步比較簡(jiǎn)單;但是內(nèi)存耗的多,切換相應(yīng)的會(huì)比較復(fù)雜,cpu利用率低創(chuàng)建銷毀、切換復(fù)雜,速度慢;編程簡(jiǎn)單,調(diào)試簡(jiǎn)單;適應(yīng)于多核、多機(jī)分布式;如果一臺(tái)機(jī)器不夠,擴(kuò)展到多臺(tái)機(jī)器比較簡(jiǎn)單。方案二:多線程,他的優(yōu)點(diǎn)在于共享進(jìn)程間的數(shù)據(jù),數(shù)據(jù)共享就變的十分的簡(jiǎn)單,并且創(chuàng)
35、建銷毀、切換簡(jiǎn)單,速度很快,缺點(diǎn)也由于這個(gè)原因?qū)е峦綇?fù)雜;雖然占用內(nèi)存少,切換簡(jiǎn)單,但是cpu利用率高,編程復(fù)雜,調(diào)試復(fù)雜;一個(gè)線程死掉將導(dǎo)致整個(gè)進(jìn)程失去功能,。通過以上兩種方案的比較,考慮適用性,選擇多線程實(shí)現(xiàn)對(duì)客戶端的監(jiān)聽。2.7 i/o多路復(fù)用除了可以采用多進(jìn)程和多線程方法去實(shí)現(xiàn)并發(fā)情況之外,還可以采用i/o多路復(fù)用這門技術(shù)來實(shí)現(xiàn)。通過該技術(shù),系統(tǒng)內(nèi)核首先會(huì)緩沖i/o數(shù)據(jù),當(dāng)某個(gè)i/o準(zhǔn)備好后,系統(tǒng)自動(dòng)通知相應(yīng)的應(yīng)用程序去完成i/o讀或?qū)懖僮?,這樣應(yīng)用程序可以迅速的完成對(duì)應(yīng)的i/o操作,因而系統(tǒng)不需要等待完成相應(yīng)i/o操作,從而應(yīng)用程序設(shè)置阻塞。因此我在收發(fā)信息方面使用了i/o多路復(fù)用
36、去處理,即在處理群聊私聊的信息傳送時(shí)。對(duì)于client端,一旦我們輸入了一行文字發(fā),系統(tǒng)會(huì)自動(dòng)的讀取,進(jìn)而發(fā)送給系統(tǒng)內(nèi)的server端,然后由server端反饋給對(duì)應(yīng)的目標(biāo)client端。方案一:當(dāng)我們使用的poll函數(shù)返回時(shí),會(huì)返回一個(gè)文件是讀寫標(biāo)志,應(yīng)用程序根據(jù)不同的返回標(biāo)志去讀寫相應(yīng)的文件,實(shí)現(xiàn)不用阻塞就可以完成讀寫。這允許進(jìn)程來決定那個(gè)client端是可讀或?qū)懸粋€(gè)或多個(gè)文件而不用阻塞的。poll返回不同的標(biāo)志,這些標(biāo)志告訴主進(jìn)程文件是否可以讀寫,其原型(定義在 ):unsigned int (*poll) (struct file *filp, poll_table *wait);實(shí)現(xiàn)
37、這個(gè)設(shè)備的方法分為下面的兩步:1. 在一個(gè)或多個(gè)可指示查詢狀態(tài)變化的等待隊(duì)列上調(diào)用 poll_wait. 當(dāng)文件描述符不可以可用來執(zhí)行 i/o時(shí), 內(nèi)核將使這個(gè)進(jìn)程在處于等待狀態(tài),一旦又來可使用的文件描述符時(shí),. 驅(qū)動(dòng)自動(dòng)的通過調(diào)用函數(shù) poll_wait增加一個(gè)新的等待隊(duì)列到 poll_table結(jié)構(gòu),原型:void poll_wait (struct file *, wait_queue_head_t *, poll_table *);2. 返回一個(gè)位掩碼:我們?cè)谔幚砟骋恍┕δ軙r(shí)不必要阻塞,需要立刻進(jìn)行的操作,那么我們就需要下面的幾個(gè)標(biāo)志(通過 定義)用來指示可能的操作,如表2-1所示:標(biāo)
38、志 含義 pollin 如果設(shè)備無阻塞的讀,就返回該值 pollrdnorm 通常的數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以讀了,就返回該值。通常的做法是會(huì)返回(polllin|pollrdnora) pollrdband 如果可 以從設(shè)備讀出帶外數(shù)據(jù),就返回該值,它只可在linux內(nèi) 核的某些網(wǎng)絡(luò)代碼中使用,通常不用在設(shè)備驅(qū)動(dòng)程序中 pollpri 如果可 以無阻塞的讀取高優(yōu)先級(jí)(帶外)數(shù)據(jù),就返回該值,返回該值會(huì)導(dǎo)致select報(bào)告文件發(fā)生異常,以為select八帶外數(shù)據(jù)當(dāng)作異常處理 pollhup 當(dāng)讀設(shè) 備的進(jìn)程到達(dá)文件尾時(shí),驅(qū)動(dòng)程序必須返回該值,依照select的功能描述,調(diào)用select的進(jìn)程被告知進(jìn)
39、程時(shí)可讀的。 pollerr 如果設(shè) 備發(fā)生錯(cuò)誤,就返回該值。 pollout 如果設(shè)備可以無阻塞地些,就返回該值 pollwrnorm 設(shè)備已經(jīng)準(zhǔn)備好,可以寫了,就返回該值。通常地做法是(pollout|pollnorm) pollwrband 于pollrdband類似表2-1 poll函數(shù)返回的位掩碼及其含義 方案二:select函數(shù):select()函數(shù)的接口主要以fd_set類型為基礎(chǔ)而建立的。fd_set)是一組文件描述符(fd)的大集合。由于在不同的平臺(tái)上fd_set類型的長度是不同的,因此規(guī)定用一組標(biāo)準(zhǔn)的宏定義來處理此類變量顯得尤其重要: fd_set set;fd_zero(
40、&set); fd_set(fd, &set); fd_clr(fd, &set); fd_isset(fd, &set); 在過去,一個(gè)fd_set通常是小于32個(gè)文件描述符的,因?yàn)閒d_set其實(shí)僅僅使用了一個(gè)int的比特矢量來實(shí)現(xiàn)它。在大多數(shù)情況下系統(tǒng)的責(zé)任之一包括檢查 fd_set能包括任意值的文件描述符,但是當(dāng)我們知道我們的文件描述符的多少時(shí)你應(yīng)該檢查/修改宏fd_setsize的值。這個(gè)值是與系統(tǒng)相關(guān)的,同時(shí)我們也要檢查linux系統(tǒng)中的自帶的select() 的man手冊(cè)。因?yàn)橛幸恍┫到y(tǒng)對(duì)多于1024個(gè)文件描述符的fd_set是存在支持的問題的。譯者注: linux就是這樣的系統(tǒng)
41、!你會(huì)發(fā)現(xiàn)sizeof(fd_set)的結(jié)果是128(*8 = fd_setsize=1024) 盡管很少你會(huì)遇到這種情況。select的基本接口其實(shí)是非常的簡(jiǎn)單的:int select(int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout); 其中: nfds 需要檢查的文件描述符個(gè)數(shù),數(shù)值應(yīng)該比是三組fd_set中最大數(shù) 更大,而不是實(shí)際文件描述符的總數(shù)。readset 用來檢查可讀性的一組文件描述符。writeset 用來檢查可寫性的一組文件描述符。exceptset
42、 用來檢查意外狀態(tài)的文件描述符。(注:錯(cuò)誤并不是意外狀態(tài))timeout null指針代表一直等待,否則是指向timeval結(jié)構(gòu)的指針,代表最 長等待時(shí)間。(如果其中tv_sec和tv_usec都等于0, 則文件描述符 的狀態(tài)不被影響,但函數(shù)并不掛起) 函數(shù)將返回響應(yīng)操作的總的響應(yīng)了的描述符,且三組數(shù)據(jù)均在恰當(dāng)位置被修改,只有響應(yīng)操作的那一些沒有修改。接著應(yīng)該用fd_isset宏來查找返回的文件描述符組。通過以上兩種方案的比較,考慮適用性,選擇調(diào)用poll函數(shù)實(shí)現(xiàn)i/o多路復(fù)用。 3 系統(tǒng)實(shí)現(xiàn) 3.1 linux提供的有關(guān)socket的系統(tǒng)調(diào)用(1) socket() 作用:socket函數(shù)為
43、client端或server端創(chuàng)建一個(gè)sokcet套接字格式:int socket(int family,int type,int protocol); 參數(shù)說明: family:表示地址族(ip地址),可以去af_unlx和af_int。其中,af_unlx只能夠用于unix系統(tǒng)進(jìn)程間通信;af_int是可以用于internet的,因而可以允許在遠(yuǎn)程主機(jī)之間通信,實(shí)驗(yàn)中使用af_int。 type:網(wǎng)絡(luò)程序所采用的通信協(xié)議,可以取sock_stream或sock_dgram。其中,sock_stream表明使用的是tcp協(xié)議,;socke_dgram表明使用的是udp協(xié)議。(2) bind(
44、 )格式: int bind(int sockfd,struct sockaddr *addr,int addrlen); 參數(shù)說明: sockfd:socket套接字的的文件描述符。 sockaddr:ip地址和端口 addrlen:設(shè)置結(jié)構(gòu)大小長度。(3) listen()格式: int listen(int sockfd, int backlog); 作用:監(jiān)聽。 參數(shù)說明: sockfd:表示調(diào)用返回的文件描述符。 backlog:表示接入隊(duì)列允許的連接數(shù)目。(4) accept()格式:int accept (int sockfd, void *addr, int *addrlen)
45、; 作用:與listen函數(shù)合用,監(jiān)聽信息、接收client端請(qǐng)求。 參數(shù)說明:sockfd:表示socket的文件描述符。addr:表示指向局部的數(shù)據(jù)結(jié)構(gòu)struct sockaddr-in的指針。addrlen:表示地址的長度。(5) connect()格式: int connect( int sockfd , struct sockaddr *serv_addr , int addrlen); 作用:在面向連接的系統(tǒng)中client端連接server端時(shí)使用,connect必須在bind后使用。 參數(shù)作用: sockfd:表示socket的文件描述符。serv-addr:表示村訪目的端口和
46、ip地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。(6) send() 和 recv() 格式1:int send (int sockfd, const vod *msg,int len, int flags); 功能:發(fā)送信息。格式2:int recv (int sockfd , void *buf,int len, usigned int flags); 作用:用于流式socket、數(shù)據(jù)報(bào)socket內(nèi)部之間的通信。close() 和 shutdown()格式:close( int sockfd) 或int shutdown(int sockfd , int how);參數(shù)說明:how的值為下面一種: 0-不
47、允許繼續(xù)接收; 1-不允許繼續(xù)發(fā)送; 2-不允許繼續(xù)發(fā)送和接收。(7) 有關(guān)線程的系統(tǒng)調(diào)用函數(shù)pthread_create()、pthread_detach()3.2 實(shí)驗(yàn)過程說明(使用tcp/ip)(1) 監(jiān)聽連接 利用socket、bind、listen建立連接,步驟是:1) 先用socket函數(shù)初始化socket,創(chuàng)建新的sockfd。sockfd = socket(af_int,sock_stream,0)2) 此步驟涉及到ip地址及其處理過程。參數(shù)說明:inet_addr 函數(shù) inaddr_any該函數(shù)把由小數(shù)點(diǎn)分開的十進(jìn)制ip地址轉(zhuǎn)為unsinged long 類型,而在實(shí)驗(yàn)中所
48、使用的為inaddr_any,使用利用自已的ip地址自動(dòng)填充。a) 利用bind函數(shù)綁定端口和ip地址。my_addr.sin_family=af_inet; /*將地址族類型設(shè)定好 */my_addr.sin_port=htons(myport); /* 將端口給其賦值*/my_addr.sin_addr.s_addr=inaddr_any; /*用連接地址自動(dòng)填充ip*/bind(sockfd,(stuct sockaddr*)&my_addr,sizeof(stuct sockaddr);/*sockfd 是分配的socket名字,my-addr則便是分配好的端口與ip,用bind綁定*
49、/b) 利用listen監(jiān)聽請(qǐng)求 (2) 發(fā)送請(qǐng)求 1)先用socket函數(shù)初始化socket,創(chuàng)建新的sockfd。 2)初始化要連接的服務(wù)器地址。 3)利用connect函數(shù)將自己的ip地址等信息發(fā)送到主機(jī),等待主機(jī)調(diào)用accept函數(shù)來接受請(qǐng)求。(3) 主機(jī)接收請(qǐng)求,進(jìn)行數(shù)據(jù)通信1)主機(jī)利用accept接收請(qǐng)求。2)創(chuàng)建子進(jìn)程,顯示歡迎信息;3)接收返回信息,顯示連接成功,并退出連接;4)關(guān)閉客戶端口socket;3.3系統(tǒng)方案說明 linux下的聊天軟件涉及的一個(gè)server端和多個(gè)client端.client端向server端發(fā)送請(qǐng)求,server端對(duì)請(qǐng)求作出響應(yīng).client端嘗試
50、與server端建立連接.一旦連接建立起來,client端和server端就可以通過socket套節(jié)字進(jìn)行通信.本系統(tǒng)中,主要有兩個(gè)應(yīng)用程序,分別為server端程序和client端,client端主要是用于消息轉(zhuǎn)發(fā)、客戶登陸信息的管理以及向所有用戶發(fā)送系統(tǒng)消息等。本系統(tǒng)采用c/s(client/server)體系結(jié)構(gòu)(見圖3-1),即client端/server端體系結(jié)構(gòu).其特點(diǎn)是client端只裝載應(yīng)用軟件,消息處理、用戶監(jiān)控等復(fù)雜的處理放在server端中實(shí)現(xiàn),這樣就可以大大簡(jiǎn)化client端的代碼,增加了系統(tǒng)的穩(wěn)定性。 圖3-1 c/s體系結(jié)構(gòu)圖其大致實(shí)現(xiàn)模型是:(1)server端設(shè)
51、置一個(gè)固定的端口號(hào).一旦server端啟動(dòng),既使用listenthread線程對(duì)端口進(jìn)行不間斷監(jiān)聽.如果client端請(qǐng)求一個(gè)連接,server端使用accept()方法打開一個(gè)socket連接.(2)客戶在host和port端口建立連接.(3)server端和client端使用inputstream和outputstream進(jìn)行通信.3.4結(jié)構(gòu)流程3.4.1. server端結(jié)構(gòu)流程圖server端通過socket()系統(tǒng)調(diào)用創(chuàng)建一個(gè)socket數(shù)組后(即設(shè)定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定bind(),就可以在端口進(jìn)行l(wèi)isten().如果有client端連接請(qǐng)求,則在數(shù)組
52、中選擇一個(gè)空socket,將client端地址賦給這個(gè)socket.然后登錄成功的客戶就可以在server端上聊天了。 圖3-2 server端結(jié)構(gòu)流程圖 3.4.2客戶端結(jié)構(gòu)流程圖客戶通過socket套接字建立與server端的連接。server端與客戶都通過調(diào)用recv()和send()來實(shí)現(xiàn)相互的通信,然后雙方通過該通信方式來相互傳遞信息,一旦收到客戶方的連接請(qǐng)求,server端accept()方法返回一個(gè)新建的socket對(duì)象??蛻舳巳缓笙騭erver端發(fā)送消息,比如聊天等,server端收到來自客戶的請(qǐng)求后,針對(duì)不同的消息處理請(qǐng)求。 圖3-3 客戶端結(jié)構(gòu)流程圖 3.4.3登錄結(jié)構(gòu)流程
53、圖用戶登錄,首先要有一個(gè)提供用戶登錄的存儲(chǔ)方式。用戶登錄的表單應(yīng)該嵌入整體的結(jié)構(gòu)當(dāng)中。在實(shí)際的應(yīng)用中,可以這樣設(shè)計(jì),如果用戶沒有登錄,則在頁面中顯示用戶登錄的選項(xiàng),用戶登錄后,則可隱藏用戶登錄的界面,并且顯示登陸成功后的其他信息。首先,用戶要自己輸入用戶名和密碼。網(wǎng)絡(luò)聊天需要很高的穩(wěn)定性和安全性,因此對(duì)用戶名不允許重復(fù)使用。同時(shí)對(duì)密碼也要求保密,將密碼加密后再存入數(shù)據(jù)文件。 圖3-4登錄結(jié)構(gòu)流程圖4 運(yùn)行效果 (1) 在編寫完tcp服務(wù)端程序server.c后,編寫一個(gè)makefile文件:all:gcc ./cirlist.c *.c -lpthread -wallrm client.dat
54、touch client.dat執(zhí)行make。(2) 在編寫完tcp客戶端程序client.c后,編寫一個(gè)makefile文件:all:gcc ./cirlist.c *.c -lpthread -lcrypt執(zhí)行make。(3) 在主機(jī)上打開一窗口,運(yùn)行server。(4) 再打開另一個(gè)窗口,運(yùn)行client 1001。(5) 再打開另一個(gè)窗口,運(yùn)行client 1002。(6) 再打開另一個(gè)窗口,運(yùn)行client 1003。(7) 輸入:【主】# ./a.out(8) 【從】# ./a.out(9) 客戶端、server端端窗口之間以及交錯(cuò)發(fā)送信息的方式相互發(fā)送和接收信息。(10) 客戶端
55、登錄時(shí)若有其他人在線,則可用調(diào)整,并按回車選擇與其私聊。還可以選擇群聊和退出。在私聊中在$file$后加文件名可實(shí)現(xiàn)文件傳輸,在$moon$后加數(shù)字(0-9)可發(fā)送表情。 開始運(yùn)行后,客戶端1001窗口的執(zhí)行順序?yàn)椋?) 注冊(cè);2) 登陸;3) 選中新登陸的好友1002,進(jìn)行私聊;4) 發(fā)送文件hello.txt給客戶端1002;5) 輸入quit!結(jié)束私聊。6) 進(jìn)入群聊7) 輸入quit!結(jié)束群聊。8) 注銷 開始運(yùn)行后,客戶端1002窗口的執(zhí)行順序?yàn)椋?) 注冊(cè);2) 登陸;3) 選中好友1001,進(jìn)行私聊;4) 接收客戶端1001發(fā)來的文件 hello.txt;5) 鍵入quit!結(jié)束私聊。6) 進(jìn)入群聊7)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小波變換在時(shí)頻分析中的應(yīng)用-洞察分析
- 胃扭轉(zhuǎn)診斷新技術(shù)-洞察分析
- 異構(gòu)計(jì)算優(yōu)化-洞察分析
- 【章末復(fù)習(xí)+測(cè)試】第2章 有理數(shù)的運(yùn)算全章復(fù)習(xí)與測(cè)試(解析版)
- 熒光光譜技術(shù)-洞察分析
- 《家裝營銷教程參考》課件
- 《油漆涂料工程》課件
- 油氣泄漏防控技術(shù)-洞察分析
- 參觀太和殿導(dǎo)游詞(8篇)
- 《玉米的生物學(xué)基礎(chǔ)》課件
- 2024年生產(chǎn)主管的挑戰(zhàn)與機(jī)遇
- 20以內(nèi)進(jìn)位加法100題(精心整理6套-可打印A4)
- 揚(yáng)州育才小學(xué)2023-2024一年級(jí)上冊(cè)數(shù)學(xué)期末復(fù)習(xí)卷(一)及答案
- 澳大利亞英文版介紹
- 04某污水處理廠630kW柔性支架光伏發(fā)電項(xiàng)目建議書
- 山中初唐王勃1
- 化妝品功效評(píng)價(jià)
- 【幼兒園園本教研】幼兒表征的教師一對(duì)一傾聽策略
- 家長會(huì)課件:高三第一學(xué)期家長會(huì)優(yōu)質(zhì)課件
- 山東省各地市地圖課件
- 四班三倒排班表
評(píng)論
0/150
提交評(píng)論