版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 2014屆畢業(yè)設(shè)計說明書</p><p> 基于Linux操作系統(tǒng)的聊天軟件的設(shè)計</p><p> 學(xué) 院: 電氣與信息工程學(xué)院 </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: 職稱 講師 </p><p> 專
2、 業(yè): 電子信息工程 </p><p> 班 級: 電子1002班 </p><p> 完成時間: 2014年5月 </p><p><b> 摘 要</b></p><p> 這篇論文整體是在linux下并通過網(wǎng)絡(luò)實現(xiàn)類似于qq的的一篇操作報告。開發(fā)
3、的框是C/S框架,由server端和client端組成,首先設(shè)置好端口參數(shù)和ip地址,在編譯,調(diào)試后實現(xiàn)server端與各個client端的連接,連接后以后server端作為中間端來使客戶機(jī)實現(xiàn)通訊,因為服務(wù)器只存在一個但是客戶端存在多個所以我們必須通過鏈表去管理,client端的信息發(fā)送通過封裝在socket結(jié)構(gòu)體中進(jìn)行傳輸。本設(shè)計采用TCP/IP協(xié)議這樣可以保證連接可靠,而且項目管理中釆用linux流行的gcc和makefile編譯
4、,大大提高了編譯和調(diào)試效率,提高了項目完成的效率,但是為了模擬幾個client端我們就需要在pc機(jī)上再安裝一個虛擬系統(tǒng)來操作client端。</p><p> 本次設(shè)計的聊天通信使用全雙工,主要實現(xiàn)了功能如:用戶的帳號與密碼的注冊與登錄,客戶點對點聊天,客戶之間的群聊,以及文件的發(fā)送與接收。測試運(yùn)行后的可靠性滿足Linux網(wǎng)絡(luò)聊天的基本要求。關(guān)鍵詞:linux, socket, ,server端,client端
5、,網(wǎng)絡(luò)編程</p><p><b> Abstract</b></p><p> This thesis as a whole is under linux platform and through the local area network to achieve similar qq chat. The overall use of C / S framewo
6、rk, 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 , and then as the server -side following tr
7、ansfer to achieve communication between client end . Since only one server -side , and you can have multiple client end , so the server si</p><p> The chat tool designed for full-duplex communication using
8、communication , to achieve the five main functions: 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
9、 the basic needs of network reliability in linux in chat .</p><p> Keywords : linux, socket,, server -side , client end , network programming</p><p><b> 目 錄</b></p><p&g
10、t;<b> 1 緒 論1</b></p><p> 1.1 課題研究的背景及意義1</p><p> 1.2 TCP/IP介紹2</p><p> 1.3 本文的研究內(nèi)容4</p><p> 2 技術(shù)說明與方案選擇5</p><p><b> 2.1通信方式5&
11、lt;/b></p><p> 2.1.1 UDP通信5</p><p> 2.1.2 TCP通信5</p><p> 2.2客戶/服務(wù)器模型6</p><p> 2.3網(wǎng)絡(luò)套接字(socket)的概念7</p><p> 2.4多線程的概念7</p><p> 2.
12、5I/O多路復(fù)用8</p><p><b> 3 系統(tǒng)實現(xiàn)11</b></p><p> 3.1 Linux提供的有關(guān)Socket的系統(tǒng)調(diào)用11</p><p> 3.2 實驗過程說明(使用TCP/IP)13</p><p> 3.3 TCP通信實現(xiàn)14</p><p><
13、b> 4 運(yùn)行效果29</b></p><p><b> 結(jié)束語34</b></p><p><b> 致謝35</b></p><p><b> 參考文獻(xiàn)36</b></p><p> 附錄A 服務(wù)器程序38</p><
14、;p> 附錄B 客戶端程序47</p><p><b> 1 緒 論</b></p><p> 1.1 課題研究的背景及意義</p><p> 隨著計算機(jī)應(yīng)用技術(shù)的日益普及,網(wǎng)絡(luò)也遍及到我們生活的每個角落,很好的利用這一資源,將成為我們工作和學(xué)習(xí),帶來極大的方便。并且可以極高的提高我們的工作效率。所以,各種聊天軟件應(yīng)運(yùn)而生了。如
15、國外的MSN等,國內(nèi)主要的有騰訊的qq,還有Ticq和一些在網(wǎng)頁上的即時通訊工具,像Chinaren網(wǎng)站上的WebMaster等等,都做得即美觀又強(qiáng)大,騰訊的qq有非常大的用戶群。</p><p> 這些網(wǎng)絡(luò)聊天軟件極大程度上方便了處于在世界各地的友人之間的聯(lián)系,無論你和親人、朋友相隔多遠(yuǎn),你都可以隨時隨地和他們交流。并且,你還可以和外國友人交流學(xué)習(xí)。</p><p> 在網(wǎng)絡(luò)發(fā)展上,
16、最早出現(xiàn)的是分布在很大的地理范圍內(nèi)的遠(yuǎn)程網(wǎng)絡(luò)(WideAreaNetwork,WAN),例如美國國防部高級研究計劃局首先研制的 ARPA 網(wǎng),它從 1969 年建立,至今已經(jīng)發(fā)展成為跨越幾大洲的巨型網(wǎng)絡(luò)。</p><p> 70 年代中期由于微型計算機(jī)的出現(xiàn)和微處理器的出現(xiàn),以及短程通訊技術(shù)的迅猛發(fā)展,兩者相輔相成,又促進(jìn)以微機(jī)為基礎(chǔ)的各種局域網(wǎng)絡(luò)(Local Area Network,LAN)的飛快發(fā)展,19
17、75 年美國 Xerox 公司首先推出了 Ethernet,與此時英國劍橋大學(xué)研制成劍橋環(huán)網(wǎng),他們是 LAN 的代表。</p><p> LAN 與 WAN 有所區(qū)別,其特點為:</p><p> 1)有限的地理范圍,通常網(wǎng)內(nèi)的計算機(jī)限于一棟大樓,樓群或一個企業(yè)及單位。</p><p> 2)較高的通訊速率,大多在每秒 1-100M bps ,而 WAN 大多
18、在幾十 Kbps。</p><p><b> 3)通訊介質(zhì)多樣。</b></p><p> 4)通常為一個部門所擁有。</p><p> 特別是 80 年代以來,以微機(jī)為基礎(chǔ),LAN 技術(shù)有了極其迅速的發(fā)展。90 年代計算機(jī)網(wǎng)絡(luò)化大趨勢尤為明顯。具稱 1978 年全世界約有 700 萬人每天使用計算機(jī),而到 1998 年上升到 5000
19、萬人,目前全世界已經(jīng)擁有超過一億臺的計算機(jī),預(yù)計每天上機(jī)人數(shù)可達(dá) 2 億以上。計算機(jī)的性能價格比以每年 25%的速度在提高。微機(jī)的應(yīng)用已經(jīng)滲透到國民經(jīng)濟(jì)的各個部門,乃至家庭和個人。這標(biāo)志著正步入信息時代,世界范圍內(nèi)的社會信息數(shù)據(jù)正在每年增長 40%到 45%的年增長率在增加,這就是迫切實現(xiàn)網(wǎng)絡(luò)化的動力源泉。據(jù)稱,約有 65%的計算機(jī)要聯(lián)網(wǎng)或已經(jīng)聯(lián)網(wǎng),以求彼此通信,達(dá)到資源共享的目標(biāo)。</p><p> 90 年
20、代計算機(jī)網(wǎng)絡(luò)化更加向深度和廣度方向發(fā)展。人們要求網(wǎng)絡(luò)傳輸?shù)膬?nèi)容范圍增加,諸如數(shù)據(jù)之外,還需傳輸聲音,圖形,圖象和文字,這就是以網(wǎng)絡(luò)為基礎(chǔ)的多媒體技術(shù),使網(wǎng)絡(luò)的應(yīng)用廣度更加擴(kuò)大,并最終為信息化社會的實現(xiàn)所必須的網(wǎng)絡(luò)連接奠定基礎(chǔ)。當(dāng)前國際 LAN 的市場上,兩雄稱霸,龍爭虎斗的局面,將可能持續(xù)相當(dāng)長一段時間。</p><p> 正如大家知道的那樣,80 年代后期美國 Novell 公司先是以“一花獨秀,壓倒群芳”之
21、勢占據(jù)了國際 LAN 市場 60%以上,一路領(lǐng)先,扶搖直上,尤其是 NetWare 386 V3.11 版</p><p> 推出后,受到普遍的注目;隨后,國際上的軟件公司龍頭老大 Microsoft 公司先后推出了LAN Manager V1.0(即 LAN 3+ Open)、LAN Manager V2.0 和 V2.1,后來居上,成為世界LAN 的兩大支柱之一。1992 年 10 月 Microsoft
22、又搶先發(fā)布了 LAN ManagerV2.2,以更加領(lǐng)先于 Novell 的 NetWare 386 V3.11,但后者立即隨后推出了 NetWare 4.0??梢姟褒垹幓⒍贰?,瓜分市場的情景。</p><p> Novel LAN 采取了“將網(wǎng)絡(luò)協(xié)議軟件與網(wǎng)絡(luò)操作系統(tǒng) NetWare 緊密結(jié)合起來”的設(shè)計構(gòu)想,可達(dá)到節(jié)省開銷,提高運(yùn)行效率之目標(biāo)。Novell LAN 最大的特點是與其底層的網(wǎng)卡的無關(guān)性,即是說
23、 NetWare 可以虛擬的在所有流行的 LAN 上面運(yùn)行,使它成為一個理想的開發(fā)網(wǎng)絡(luò)應(yīng)用軟件的平臺,吸引了廣大用戶軟件人員為之開發(fā)越來越多的網(wǎng)絡(luò)應(yīng)用軟件。反過來又推動其發(fā)展,同時 Novell LAN 采取了開放協(xié)議技術(shù)(OPT),允許各種網(wǎng)絡(luò)協(xié)議緊密結(jié)合,進(jìn)而在 NetWare 386 V3.11 版中采用了 NLM 模塊的組合技術(shù),可以實現(xiàn)異機(jī)種聯(lián)網(wǎng)的難題。此外,Novell LAN 不需專用服務(wù)器,占用工作站內(nèi)存最小,使用方便,
24、功能強(qiáng),效率高,兼容性強(qiáng),可靠性高,保密性強(qiáng),容錯性好。尤其在 NetWare 386 V3.11版中實現(xiàn)了服務(wù)器軟件的“分布式結(jié)構(gòu)策略”、“橫向信息共享”、“報文傳送”技術(shù)、增添了“TCP/IP ?!薄崿F(xiàn)了“SNA 協(xié)議”和“開放式數(shù)據(jù)鏈路接口”等一系列新技術(shù),使 NovellLAN 更深入人心,擴(kuò)大了市場。</p><p> 與此同時,微軟的LAN Manager V2.1和V2.2局域網(wǎng)版除了有一般的基
25、礎(chǔ)的優(yōu)點,還應(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ā)平臺,更方便與異類機(jī)種訪問網(wǎng)絡(luò)。由于 LAN Manager與 Windows 的聯(lián)系;使它有更高的的性格比。在網(wǎng)絡(luò)化技術(shù)飛速發(fā)展的今天,TCP/IP 協(xié)議可謂是立下了汗馬功勞。起先,TCP/IP(Transmissio
26、n Control Protocol/Internet Protocol)是由美國國防部于 70 年代提出來的,將中大型機(jī)連成的網(wǎng)絡(luò)互連起來,并按 TCP/IP 協(xié)議這種模式實現(xiàn)異網(wǎng)之間通訊,接著美國國防部高級計劃局(DARPA)于 70 年代末提出了幾種國際互連(Internet)技術(shù)。這些技術(shù)實現(xiàn)了在科學(xué)研究,軍事和社會生活迫切需要共享的資料。</p><p><b> 題</b>&l
27、t;/p><p> 1.2 TCP/IP介紹</p><p> Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協(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ù)如何在
28、它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺電腦規(guī)定一個地址。</p><p><b> 協(xié)議優(yōu)勢</b></p><p> 在社會長期的發(fā)展過程中,IP逐步取代了其余的網(wǎng)絡(luò)。這是一
29、個簡單的解釋。IP傳輸通用數(shù)據(jù)。數(shù)據(jù)能夠用于任何目的,并且能夠很輕易地取代以前由專有數(shù)據(jù)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)。</p><p><b> ?。?)協(xié)議的缺點</b></p><p> 第一,協(xié)議在服務(wù),接口方面的區(qū)分不明確。好的軟件工程在功能與實現(xiàn)上面是有明確的區(qū)分的,TCP/IP沒有很好地做到這點。</p><p> 第二,主機(jī)-網(wǎng)絡(luò)層本身并不
30、是實際的一層,它定義了網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層的接口。</p><p> 1.3 linux介紹 Linux是一種開源的操作系統(tǒng),它擁有像Windows和Mac那樣的功能齊全的UI界面(GUI,Graphical User Interface)。Linus Torvald。作為一種很棒的操作系統(tǒng),它具有與Unix,Mac,Windows和Windows NT相似的的功能,但是其中又會有不同的地方。 提到L
31、inux我們一定要知道GNU和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)
32、規(guī)定,Linux的源代碼可以在網(wǎng)上免費(fèi)自由獲取,這一點為我們學(xué)習(xí)者提供了極大的方便。GPL極大的體現(xiàn)了Stallman的思想:只要用戶所做的修改是有利于系統(tǒng)發(fā)展的,用戶可以自由地使用、拷貝、查詢、重用、修改也可以發(fā)</p><p> ?。?) Linux的今天 作為服務(wù)器級的操作系統(tǒng),在廣大的開發(fā)者的共同努力下Linux操作系統(tǒng)已經(jīng)非常成熟了?,F(xiàn)在的Linux內(nèi)核集成了150萬多行代碼,不僅可以作為Web
33、服務(wù)器平臺,而且也為越來越多的用戶提供文件和打印服務(wù)。它既被當(dāng)作郵件服務(wù)器的一種候選平臺,也被當(dāng)作一種強(qiáng)壯而安全的防火墻。 Linux的企業(yè)級特性:Linux系統(tǒng)不僅支持多處理器、支持大型文件系統(tǒng)、日志文件系統(tǒng)而且在密集型計算和高可用性集群技術(shù)上面也逐步成熟。 現(xiàn)在的Linux的UI界面也在繼續(xù)完善。KDE桌面提供的圖形用戶界面在易用性和可配置方面和微軟的Windows不相上下。(3) Linux的明天 Li
34、nux最強(qiáng)大的生命力在于其開源。每學(xué)習(xí)者都有可以輕松自由的獲取內(nèi)核源代碼,每個人都可以運(yùn)載源程序并對其加以修改,而后的他人也可以自由獲取你修改后的源程序。集市模型就是為Linux這種獨特的自由流暢的開發(fā)模型已被命名。集市模型是通過重視實驗征集和充分利用早期的反饋,通過平衡的配置腦力資源,從而開發(fā)出更優(yōu)秀的軟件。</p><p> 1.4 本文的研究內(nèi)容</p><p> 本課題的任務(wù)是
35、設(shè)計一個支持多人群聊以及用戶間私聊和文件傳送的聊天系統(tǒng)。</p><p> 首先服務(wù)器會初始化,然后等待客戶端的連接。每連接一個客戶端就簡歷一個線程去監(jiān)聽客戶端請求。</p><p> 客戶端是注冊好了的,只需要登陸??蛻舳俗猿晒芽蛻舳诵畔⒈4娴芥湵砗臀募?。注銷時會把對應(yīng)的鏈表節(jié)點銷毀,并且刪除文件對應(yīng)信息。</p><p> 當(dāng)有多個客戶端登陸時,客
36、戶端界面會顯示其他用戶的用戶名。可以實現(xiàn)用↑↓鍵選擇,然后按回車鍵進(jìn)入與其的私聊界面。然后可以和其進(jìn)行私聊和文件傳送。而好友界面的倒數(shù)第二個為群聊選擇,當(dāng)進(jìn)入群聊時,可以實現(xiàn)多人同時聊天。另外,如果其他人下線時。你的顯示好友界面里的那個客戶端就會消失,同時,有人上線時,會在好友欄加上新加的客戶端。最后一個選項是退出,銷毀對應(yīng)線程及文件描述符。</p><p> 2 技術(shù)說明與方案選擇</p>&l
37、t;p><b> 2.1 通信方式</b></p><p> 2.1.1 UDP通信 </p><p> UDP是用戶數(shù)據(jù)報協(xié)議的簡稱。UDP在傳送數(shù)據(jù)之前不需要先建立連接,遠(yuǎn)地主機(jī)的傳輸層在收到udp數(shù)據(jù)后,不能給出任何確認(rèn)信息,所以不能保證其交付時信息的可靠性。它的特點是:無連接,不能提供的可靠的信道,但正是因為無連接這個特點使UDP具有很好的傳輸效
38、率。</p><p> 2.1.2 TCP通信</p><p> TCP是傳輸控制協(xié)議的簡稱,TCP可以提供一條全雙工的、可靠的信道。TCP在數(shù)據(jù)傳送之前必須先建立相應(yīng)的連接,數(shù)據(jù)傳送完成后必須釋放連接。但是TCP不能提供廣播和多播這些信息服務(wù)。</p><p> 正是因為TCP要提供可靠的、面向連接的運(yùn)輸?shù)榷鄻拥姆?wù),所以增加了額外的系統(tǒng)開銷,例如確認(rèn)、流量
39、的控制、計時器以及連接管理等服務(wù)都需要消耗許多系統(tǒng)資源。 如果計算機(jī)之間使用通信方式是TCP通信,則計算機(jī)之間的連接過程需要三次握手實現(xiàn),如下圖1-1所示。</p><p> 圖1-1 用三次握手建立TCP連接</p><p> 對于計算機(jī)連接的釋放過程也需要類似的3次握手的互相確認(rèn)的過程,如實驗圖1-2所示。</p><p> 圖1-2 TCP連接的釋放過程
40、</p><p> 通過以上兩種方案的比較,考慮適用性,本次課題我選擇了選擇TCP通信協(xié)議。</p><p> 2.2 C/S模型</p><p> C/S模型將應(yīng)用程序分為server端和client端兩基本的部分,client端對server端發(fā)送請求,server端對其作出相應(yīng)的回應(yīng)并開始提供服務(wù)。在TCP/IP應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用C/S模型
41、設(shè)計的。server端一直處于等待狀態(tài),當(dāng)一個client端提出請求時。Server端馬上會根據(jù)client端發(fā)送的請求從而執(zhí)行對應(yīng)操作以至于達(dá)到Server端的要求。</p><p> 通常,C/S模型必須包含兩個獨立的應(yīng)用程序:client端和Server端的應(yīng)用程序。</p><p> 在C/S模型中,多個在同樣的內(nèi)網(wǎng)中的計算機(jī)都作為client端,與端口號和ip進(jìn)行連接,并通過
42、Server端傳遞信息。所以client端的通信既可以理解為client端和Server端之間的通信。所以采用C/S模型進(jìn)行網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計需要分別編寫client端和Server端的源代碼,client端和Server端之間相互通信的程序流程如實驗圖1-3所示。</p><p> 圖1-3 Socket通信流程圖</p><p> 2.3 網(wǎng)絡(luò)套接字(socket)的概念</
43、p><p> Socket接口是TCP/IP的API,它提供了相應(yīng)的功能函數(shù)與例程,我們可以使用對應(yīng)的函數(shù)與例程進(jìn)行TCP/IP應(yīng)用程序的開發(fā)與維護(hù)。</p><p> 使用Socket套接字進(jìn)行網(wǎng)絡(luò)通信的開發(fā)過程如下面的步驟:</p><p> 建立一個Socket套接字</p><p> 按我們所需要的要求配置好Socket套接字,將
44、socket連接到遠(yuǎn)程server端或者是本機(jī)server端或給Socket套接字指定本地協(xié)議端口號。</p><p> 按要求通過Socket套接字發(fā)送和接受相應(yīng)的數(shù)據(jù)與信息。</p><p> 完成通信以后我們需要關(guān)閉此Socket套接字并且釋放相應(yīng)的其他銷耗系統(tǒng)的操作。</p><p> 以上就是通過Socket套接字來實現(xiàn)點對點信息通信的4個編程的核心
45、要點。</p><p><b> 2.4 系統(tǒng)的選擇</b></p><p> 方案一:紅帽子系統(tǒng)即Red Ha系統(tǒng)是目前銷售量最高、安裝最簡便、最適合初學(xué)者的Linux發(fā)行版,也是目前世界上最流行的Linux發(fā)行套件,它的市場營銷、包裝及服務(wù)做的相當(dāng)不錯,自行開發(fā)了RPM套件管理程序及X桌面環(huán)境Gnome的眾多軟件并將其源代碼回饋給Open Source com
46、munity。</p><p> 也正是因為Red Hat的方便性,安裝程序?qū)⑾到y(tǒng)的構(gòu)架或軟件安裝方式全部做了包裝,用戶學(xué)到的都是GUI界面(圖形用戶界面)上輸入一些設(shè)置值的粗淺知識,至于軟件安裝了那些文件、安裝到哪個文件目錄、系統(tǒng)作了哪些設(shè)置,使用者則一無所知,一旦真正遇到系統(tǒng)程序發(fā)生問題時,要解決問題也就比較困難。</p><p> 方案二:Caldera OpenLinux系統(tǒng),
47、Caldera將OpenLinux這套系統(tǒng)定位為容易使用與設(shè)置的發(fā)行版,以集成使用環(huán)境與最終用戶辦公環(huán)境,容易安裝使用與簡便管理為系統(tǒng)目標(biāo),有望成為最流行的公司團(tuán)體臺式Linux操作系統(tǒng),適合初學(xué)者使用,全部安裝需要1GB的硬盤空間。</p><p> Caldera有自行研發(fā)的圖形界面的安裝程序向?qū)?,安裝過程可以玩俄羅斯方塊,提供完整的KDE桌面環(huán)境,附贈功能強(qiáng)大的商業(yè)軟件,如StarOffice、圖形界面的
48、硬盤分割工具Partition Magic等。</p><p> 方案三:SuSE Linux系統(tǒng),SuSE是歐洲最流行的Linux發(fā)行版,而且SuSE是軟件國際化的先驅(qū),讓軟件支持各國語系,貢獻(xiàn)頗豐,SuSE也是用RPM作為軟件安裝管理程序,不過SuSE并不適合新手使用,提供了非常多的工具軟件,全部安裝需4.5GB的硬盤空間,安裝過程也較為復(fù)雜。</p><p> 通過以上三種方案的
49、比較,考慮適用性,和可操作性,選擇Red hat Linux 操作系統(tǒng)。</p><p> 2.5 開發(fā)工具的選擇</p><p> 方案一:vi編輯器,vi編輯器是Linux上最基本的文本編輯器,它是以字符模式為核心的。由于去除了UI界面,使vi編輯器效率提高了很多。在Linux上也有許多UI界面的編輯器,但VI在系統(tǒng)和服務(wù)器管理中的相應(yīng)的功能是UI編輯器不可以達(dá)到的。VI編輯器在L
50、inux上的重要性是與Edit在DOS上的地位是一樣。Vi編輯器可以執(zhí)行文字輸出、文字刪除、文字查找、文字替換、文件塊操作等眾多文本操作,用戶也可以根據(jù)自身的需要對其進(jìn)行相應(yīng)的定制和二次開發(fā),這是其他編輯程序所不能達(dá)到的效果。加上紅帽子系統(tǒng)中自帶的gcc編譯器和gdb調(diào)試工具,所以Linux系統(tǒng)目前最主流的開發(fā)工具。</p><p> 方案二:用eclipse 加CDT+GCC+GDB,雖然eclipse 擁有
51、方便的UI界面,配置開發(fā)環(huán)境有點復(fù)雜,如果配置好了,開發(fā)的效率還是不錯的。和在windows下開發(fā)基本相似。用eclipse+CDT可以自動生成makefile文件,比較適合偏愛圖形界面的開發(fā)人員。</p><p> 通過以上兩種方案的比較,考慮適用性,和編程習(xí)慣,選擇方案一。</p><p> 2.6 多線程與多進(jìn)程</p><p> 點對點通信的實現(xiàn)知識,
52、了解了主機(jī)進(jìn)程與服務(wù)器進(jìn)程之間的連接關(guān)系,建立連接了一對一的進(jìn)程聯(lián)系,即主機(jī)的一個進(jìn)程必須與服務(wù)器的一個進(jìn)程之間建立相應(yīng)的連接。而對于每一個client端服務(wù)器都要建立一個相應(yīng)的進(jìn)程去實現(xiàn)和client端的通信。</p><p> 對于線程的并發(fā)情況我們就要建立多個線程去出來。由于服務(wù)端接受信息的行為是被動的,當(dāng)服務(wù)端沒有信息可以接收時,該進(jìn)程就應(yīng)該自動的阻塞,發(fā)送任務(wù)也應(yīng)該一起被阻塞。不同端口的收發(fā)之間就存在
53、并發(fā)情況,這樣我們就應(yīng)該應(yīng)該建立多個不同的進(jìn)程去分別完成信息的收發(fā)。這樣,當(dāng)一個client端的請求被阻塞時,不至于影響其它的client端的正常工作。</p><p> 關(guān)于多進(jìn)程和多線程,我覺得最核心的一句話是“進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。</p><p> 方案一:多進(jìn)程,數(shù)據(jù)共享非常復(fù)雜,需要用IPC處理;數(shù)據(jù)是分開處理的,同步比較簡單;但是內(nèi)存耗的
54、多,切換相應(yīng)的會比較復(fù)雜,CPU利用率低創(chuàng)建銷毀、切換復(fù)雜,速度慢;編程簡單,調(diào)試簡單;適應(yīng)于多核、多機(jī)分布式;如果一臺機(jī)器不夠,擴(kuò)展到多臺機(jī)器比較簡單。</p><p> 方案二:多線程,他的優(yōu)點在于共享進(jìn)程間的數(shù)據(jù),數(shù)據(jù)共享就變的十分的簡單,并且創(chuàng)建銷毀、切換簡單,速度很快,缺點也由于這個原因?qū)е峦綇?fù)雜;雖然占用內(nèi)存少,切換簡單,但是CPU利用率高,編程復(fù)雜,調(diào)試復(fù)雜;一個線程死掉將導(dǎo)致整個進(jìn)程失去功能,
55、。</p><p> 通過以上兩種方案的比較,考慮適用性,選擇多線程實現(xiàn)對客戶端的監(jiān)聽。</p><p> 2.7 I/O多路復(fù)用</p><p> 除了可以采用多進(jìn)程和多線程方法去實現(xiàn)并發(fā)情況之外,還可以采用I/O多路復(fù)用這門技術(shù)來實現(xiàn)。通過該技術(shù),系統(tǒng)內(nèi)核首先會緩沖I/O數(shù)據(jù),當(dāng)某個I/O準(zhǔn)備好后,系統(tǒng)自動通知相應(yīng)的應(yīng)用程序去完成I/O讀或?qū)懖僮?,這樣應(yīng)用
56、程序可以迅速的完成對應(yīng)的I/O操作,因而系統(tǒng)不需要等待完成相應(yīng)I/O操作,從而應(yīng)用程序設(shè)置阻塞。</p><p> 因此我在收發(fā)信息方面使用了I/O多路復(fù)用去處理,即在處理群聊私聊的信息傳送時。對于client端,一旦我們輸入了一行文字發(fā),系統(tǒng)會自動的讀取,進(jìn)而發(fā)送給系統(tǒng)內(nèi)的server端,然后由server端反饋給對應(yīng)的目標(biāo)client端。</p><p> 方案一:當(dāng)我們使用的po
57、ll函數(shù)返回時,會返回一個文件是讀寫標(biāo)志,應(yīng)用程序根據(jù)不同的返回標(biāo)志去讀寫相應(yīng)的文件,實現(xiàn)不用阻塞就可以完成讀寫。這允許進(jìn)程來決定那個client端是可讀或?qū)懸粋€或多個文件而不用阻塞的。poll返回不同的標(biāo)志,這些標(biāo)志告訴主進(jìn)程文件是否可以讀寫,其原型(定義在<linux\poll.h> ):</p><p> unsigned int (*poll) (struct file *filp, pol
58、l_table *wait);</p><p> 實現(xiàn)這個設(shè)備的方法分為下面的兩步:</p><p> 1. 在一個或多個可指示查詢狀態(tài)變化的等待隊列上調(diào)用 poll_wait. 當(dāng)文件描述符不可以可用來執(zhí)行 I/O時, 內(nèi)核將使這個進(jìn)程在處于等待狀態(tài),一旦又來可使用的文件描述符時,. 驅(qū)動自動的通過調(diào)用函數(shù) poll_wait增加一個新的等待隊列到 poll_table結(jié)構(gòu),原型:&
59、lt;/p><p> void poll_wait (struct file *, wait_queue_head_t *, poll_table *);</p><p> 2. 返回一個位掩碼:我們在處理某一些功能時不必要阻塞,需要立刻進(jìn)行的操作,那么我們就需要下面的幾個標(biāo)志(通過<linux/poll.h> 定義)用來指示可能的操作,如表2-1所示:</p>
60、<p> 表2-1 poll函數(shù)返回的位掩碼及其含義</p><p> 方案二:select函數(shù):select()函數(shù)的接口主要以'fd_set'類型為基礎(chǔ)而建立的。'fd_set)是一組文件描述符(fd)的大集合。由于在不同的平臺上fd_set類型的長度是不同的,因此規(guī)定用一組標(biāo)準(zhǔn)的宏定義來處理此類變量顯得尤其重要: </p><p> fd_s
61、et set;</p><p> FD_ZERO(&set); </p><p> FD_SET(fd, &set); </p><p> FD_CLR(fd, &set); </p><p> FD_ISSET(fd, &set);</p><p> 在過去,
62、一個fd_set通常是小于32個文件描述符的,因為fd_set其實僅僅使用了一個int的比特矢量來實現(xiàn)它。在大多數(shù)情況下系統(tǒng)的責(zé)任之一包括檢查 fd_set能包括任意值的文件描述符,但是當(dāng)我們知道我們的文件描述符的多少時你應(yīng)該檢查/修改宏FD_SETSIZE的值。這個值是與系統(tǒng)相關(guān)的,同時我們也要檢查Linux系統(tǒng)中的自帶的select() 的man手冊。因為有一些系統(tǒng)對多于1024個文件描述符的fd_set是存在支持的問題的。[譯者注
63、: Linux就是這樣的系統(tǒng)!你會發(fā)現(xiàn)sizeof(fd_set)的結(jié)果是128(*8 = FD_SETSIZE=1024) 盡管很少你會遇到這種情況。select的基本接口其實是非常的簡單的:</p><p> int select(int nfds, fd_set *readset, fd_set *writeset, </p><p> fd_set *exceptse
64、t, struct timeval *timeout); </p><p> 其中: nfds 需要檢查的文件描述符個數(shù),數(shù)值應(yīng)該比是三組fd_set中最大數(shù) 更大,而不是實際文件描述符的總數(shù)。readset 用來檢查可讀性的一組文件描述符。writeset 用來檢查可寫性的一組文件描述符。exceptset 用來檢查意外狀
65、態(tài)的文件描述符。(注:錯誤并不是意外狀態(tài))timeout NULL指針代表一直等待,否則是指向timeval結(jié)構(gòu)的指針,代表最 長等待時間。(如果其中tv_sec和tv_usec都等于0, 則文件描述符 的狀態(tài)不被影響,但函數(shù)并不掛起) </p><p> 函數(shù)將返回響應(yīng)操作的總的響應(yīng)了的描述符,且三組數(shù)據(jù)均在恰當(dāng)位置被修改,只有響應(yīng)操作的那一些沒有修改。接著應(yīng)該用F
66、D_ISSET宏來查找返回的文件描述符組。</p><p> 通過以上兩種方案的比較,考慮適用性,選擇調(diào)用poll函數(shù)實現(xiàn)I/O多路復(fù)用。</p><p><b> 3 系統(tǒng)實現(xiàn)</b></p><p> 3.1 Linux提供的有關(guān)Socket的系統(tǒng)調(diào)用</p><p><b> Socket()&l
67、t;/b></p><p> 作用:socket函數(shù)為client端或server端創(chuàng)建一個sokcet套接字</p><p><b> 格式:</b></p><p> int socket(int family,int type,int protocol);</p><p><b> 參數(shù)說明
68、:</b></p><p> family:表示地址族(IP地址),可以去AF_UNLX和AF_INT。</p><p> 其中,AF_UNLX只能夠用于UNIX系統(tǒng)進(jìn)程間通信;AF_INT是可以用于Internet的,因而可以允許在遠(yuǎn)程主機(jī)之間通信,實驗中使用AF_INT。</p><p> Type:網(wǎng)絡(luò)程序所采用的通信協(xié)議,可以取SOCK_S
69、TREAM或SOCK_DGRAM。其中,SOCK_STREAM表明使用的是TCP協(xié)議,;SOCKE_DGRAM表明使用的是UDP協(xié)議。</p><p><b> bind( )</b></p><p><b> 格式:</b></p><p> int bind(int sockfd,struct sockaddr
70、*addr,int addrlen);</p><p><b> 參數(shù)說明:</b></p><p> Sockfd:socket套接字的的文件描述符。</p><p> Sockaddr:IP地址和端口</p><p> Addrlen:設(shè)置結(jié)構(gòu)大小長度。</p><p><b&g
71、t; listen()</b></p><p><b> 格式:</b></p><p> int listen(int sockfd, int backlog);</p><p><b> 作用:監(jiān)聽。</b></p><p><b> 參數(shù)說明:</b>
72、;</p><p> Sockfd:表示調(diào)用返回的文件描述符。</p><p> backlog:表示接入隊列允許的連接數(shù)目。</p><p><b> accept()</b></p><p><b> 格式:</b></p><p> Int accept (i
73、nt sockfd, void *addr, int *addrlen);</p><p> 作用:與listen函數(shù)合用,監(jiān)聽信息、接收client端請求。</p><p><b> 參數(shù)說明:</b></p><p> sockfd:表示socket的文件描述符。</p><p> addr:表示指向局部的數(shù)
74、據(jù)結(jié)構(gòu)struct sockaddr-in的指針。</p><p> addrlen:表示地址的長度。</p><p><b> connect()</b></p><p><b> 格式:</b></p><p> int connect( int sockfd , struct sock
75、addr *serv_addr , int addrlen);</p><p> 作用:在面向連接的系統(tǒng)中client端連接server端時使用,connect必須在bind后使用。</p><p><b> 參數(shù)作用: </b></p><p> sockfd:表示socket的文件描述符。</p><p>
76、serv-addr:表示村訪目的端口和ip地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。</p><p> send() 和 recv()</p><p><b> 格式1:</b></p><p> int send (int sockfd, const vod *msg,int len, int flags);</p><p>&
77、lt;b> 功能:發(fā)送信息。</b></p><p><b> 格式2:</b></p><p> int recv (int sockfd , void *buf,int len, usigned int flags);</p><p> 作用:用于流式socket、數(shù)據(jù)報socket內(nèi)部之間的通信。</p&g
78、t;<p> close() 和 shutdown()</p><p><b> 格式:</b></p><p> close( int sockfd) </p><p> 或int shutdown(int sockfd , int how);</p><p><b> 參數(shù)說明:&l
79、t;/b></p><p> How的值為下面一種:</p><p> 0----不允許繼續(xù)接收;</p><p> 1----不允許繼續(xù)發(fā)送;</p><p> 2---不允許繼續(xù)發(fā)送和接收。</p><p> 有關(guān)線程的系統(tǒng)調(diào)用函數(shù)pthread_create()、pthread_detach()&
80、lt;/p><p> 3.2 實驗過程說明(使用TCP/IP)</p><p><b> 監(jiān)聽連接</b></p><p> 利用socket、bind、listen建立連接,步驟是:</p><p> 先用socket函數(shù)初始化socket,創(chuàng)建新的sockfd。</p><p> Soc
81、kfd = socket(AF_INT,SOCK_STREAM,0)</p><p> 此步驟涉及到IP地址及其處理過程。</p><p><b> 參數(shù)說明:</b></p><p> inet_addr 函數(shù) INADDR_ANY</p><p> 該函數(shù)把由小數(shù)點分開的十進(jìn)制IP地址轉(zhuǎn)為unsinged l
82、ong 類型,而在實驗中所使用的為INADDR_ANY,使用利用自已的IP地址自動填充。</p><p> 利用bind函數(shù)綁定端口和IP地址。</p><p> My_addr.sin_family=AF_INET; /*將地址族類型設(shè)定好 */</p><p> My_addr.sin_port=htons(MYPORT);
83、/* 將端口給其賦值*/</p><p> My_addr.sin_addr.s_addr=INADDR_ANY; /*用連接地址自動填充ip*/</p><p> Bind(sockfd,(stuct sockaddr*)&my_addr,sizeof(stuct sockaddr));</p><p> /*sockfd 是分配的socket名字,
84、my-addr則便是分配好的端口與IP,用bind綁定*/</p><p> 利用listen監(jiān)聽請求</p><p><b> 發(fā)送請求</b></p><p> 1)先用socket函數(shù)初始化socket,創(chuàng)建新的sockfd。</p><p> 2)初始化要連接的服務(wù)器地址。</p><
85、p> 3)利用connect函數(shù)將自己的IP地址等信息發(fā)送到主機(jī),等待主機(jī)調(diào)用accept函數(shù)來接受請求。</p><p> 主機(jī)接收請求,進(jìn)行數(shù)據(jù)通信</p><p> 1)主機(jī)利用accept接收請求。</p><p> 2)創(chuàng)建子進(jìn)程,顯示歡迎信息;</p><p> 3)接收返回信息,顯示連接成功,并退出連接;<
86、/p><p> 4)關(guān)閉客戶端口socket;</p><p> 3.3系統(tǒng)方案說明 </p><p> Linux下的聊天軟件涉及的一個server端和多個client端.client端向server端發(fā)送請求,server端對請求作出響應(yīng).client端嘗試與server端建立連接.一旦連接建立起來,client端和server端就可以通過socket套節(jié)字進(jìn)
87、行通信.本系統(tǒng)中,主要有兩個應(yīng)用程序,分別為server端程序和client端,client端主要是用于消息轉(zhuǎn)發(fā)、客戶登陸信息的管理以及向所有用戶發(fā)送系統(tǒng)消息等。</p><p> 本系統(tǒng)采用C/S(Client/Server)體系結(jié)構(gòu)(見圖3-1),即client端/server端體系結(jié)構(gòu).其特點是client端只裝載應(yīng)用軟件,消息處理、用戶監(jiān)控等復(fù)雜的處理放在server端中實現(xiàn),這樣就可以大大簡化clie
88、nt端的代碼,增加了系統(tǒng)的穩(wěn)定性。</p><p> 圖3-1 C/S體系結(jié)構(gòu)圖</p><p><b> 其大致實現(xiàn)模型是:</b></p><p> ?。?)server端設(shè)置一個固定的端口號.一旦server端啟動,既使用ListenThread線程對端口進(jìn)行不間斷監(jiān)聽.如果client端請求一個連接,server端使用accept(
89、)方法打開一個socket連接.</p><p> ?。?)客戶在host和port端口建立連接.</p><p> ?。?)server端和client端使用InputStream和OutputStream進(jìn)行通信.</p><p><b> .</b></p><p><b> 3.4結(jié)構(gòu)流程</
90、b></p><p> 3.4.1. server端結(jié)構(gòu)流程圖</p><p> server端通過socket()系統(tǒng)調(diào)用創(chuàng)建一個Socket數(shù)組后(即設(shè)定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定bind(),就可以在端口進(jìn)行l(wèi)isten().如果有client端連接請求,則在數(shù)組中選擇一個空Socket,將client端地址賦給這個Socket.然后登錄成功的客戶就可
91、以在server端上聊天了。</p><p> 圖3-2 server端結(jié)構(gòu)流程圖</p><p> 3.4.2客戶端結(jié)構(gòu)流程圖</p><p> 客戶通過Socket套接字建立與server端的連接。server端與客戶都通過調(diào)用recv()和send()來實現(xiàn)相互的通信,然后雙方通過該通信方式來相互傳遞信息,一旦收到客戶方的連接請求,server端acce
92、pt()方法返回一個新建的Socket對象??蛻舳巳缓笙騭erver端發(fā)送消息,比如聊天等,server端收到來自客戶的請求后,針對不同的消息處理請求。</p><p> 圖3-3 客戶端結(jié)構(gòu)流程圖</p><p> 3.4.3登錄結(jié)構(gòu)流程圖</p><p> 用戶登錄,首先要有一個提供用戶登錄的存儲方式。用戶登錄的表單應(yīng)該嵌入整體的結(jié)構(gòu)當(dāng)中。在實際的應(yīng)用中,
93、可以這樣設(shè)計,如果用戶沒有登錄,則在頁面中顯示用戶登錄的選項,用戶登錄后,則可隱藏用戶登錄的界面,并且顯示登陸成功后的其他信息。</p><p> 首先,用戶要自己輸入用戶名和密碼。網(wǎng)絡(luò)聊天需要很高的穩(wěn)定性和安全性,因此對用戶名不允許重復(fù)使用。同時對密碼也要求保密,將密碼加密后再存入數(shù)據(jù)文件。</p><p> 圖3-4登錄結(jié)構(gòu)流程圖</p><p><b
94、> 4 運(yùn)行效果</b></p><p> 在編寫完TCP服務(wù)端程序server.c后,編寫一個Makefile文件:</p><p><b> all:</b></p><p> gcc ../cirlist.c *.c -lpthread -Wall</p><p> rm client.
95、dat</p><p> touch client.dat</p><p><b> 執(zhí)行make。</b></p><p> 在編寫完TCP客戶端程序client.c后,編寫一個Makefile文件:</p><p><b> all:</b></p><p>
96、gcc ../cirlist.c *.c -lpthread -lcrypt</p><p><b> 執(zhí)行make。</b></p><p> 在主機(jī)上打開一窗口,運(yùn)行server。</p><p> 再打開另一個窗口,運(yùn)行client 1001。</p><p> 再打開另一個窗口,運(yùn)行client 1002
97、。</p><p> 再打開另一個窗口,運(yùn)行client 1003。</p><p> 輸入:【主】# ./a.out</p><p> 【從】# ./a.out</p><p> 客戶端、server端端窗口之間以及交錯發(fā)送信息的方式相互發(fā)送和接收信息。</p><p> 客戶端登錄時若有其他人在線,則可用
98、↑↓調(diào)整,并按回車選擇與其私聊。</p><p> 還可以選擇群聊和退出。</p><p> 在私聊中在$FILE$后加文件名可實現(xiàn)文件傳輸,在$MOON$后加數(shù)字(0-9)可發(fā)送表情。</p><p> 開始運(yùn)行后,客戶端1001窗口的執(zhí)行順序為:</p><p><b> 注冊;</b></p>
99、<p><b> 登陸;</b></p><p> 選中新登陸的好友1002,進(jìn)行私聊;</p><p> 發(fā)送文件hello.txt給客戶端1002;</p><p> 輸入quit!結(jié)束私聊。</p><p><b> 進(jìn)入群聊</b></p><p&g
100、t; 輸入quit!結(jié)束群聊。</p><p><b> 注銷</b></p><p> 開始運(yùn)行后,客戶端1002窗口的執(zhí)行順序為:</p><p><b> 注冊;</b></p><p><b> 登陸;</b></p><p> 選中
101、好友1001,進(jìn)行私聊;</p><p> 接收客戶端1001發(fā)來的文件 hello.txt;</p><p> 鍵入quit!結(jié)束私聊。</p><p><b> 進(jìn)入群聊</b></p><p> 輸入quit!結(jié)束群聊。</p><p><b> 注銷</b>
102、</p><p> 開始運(yùn)行后,客戶端1002窗口的執(zhí)行順序為:</p><p><b> 注冊;</b></p><p><b> 登陸;</b></p><p><b> 進(jìn)入群聊</b></p><p> 輸入quit!結(jié)束群聊。<
103、/p><p><b> 注銷</b></p><p><b> 運(yùn)行結(jié)果如下。</b></p><p> 客戶端1001輸入./a.out進(jìn)入歡迎界面,如圖4-1。</p><p> 圖4-1 1001歡迎窗口</p><p> 按↑↓鍵選中注冊,如圖4-2。<
104、/p><p> 圖4-2 1001選中注冊</p><p> 按回車鍵進(jìn)入注冊界面,輸入賬號密碼注冊成功,如圖4-3。</p><p> 圖4-3 1001注冊成功</p><p> 然后退到歡迎界面,回車選擇登陸,如圖4-4。</p><p> 圖4-4 1001登陸成功</p><p
105、> 登陸成功后,進(jìn)入如圖4-5好友列表界面(其中黑色的杠代表選中的行)。</p><p> 圖4-5 1001好友列表窗口</p><p> 好友1002登陸成功后,1001的好友列表會自動刷新,如圖4-6。</p><p> 圖4-6 1002登陸后1001好友列表窗口</p><p> 客戶端1001和1002分別選中
106、對方,開始私聊,其中包含文件傳送和表情發(fā)送,如圖4-7。</p><p> 圖4-7 客戶端1002與1001私聊窗口</p><p> 客戶端1001、1002和1003分別選中群聊后,進(jìn)入群聊窗口,如圖4-8。</p><p> 圖4-8 客戶端1002、1001和1003群聊窗口</p><p> 客戶端1002接受文件前
107、后文件夾下的文件列表如圖4-9所示。</p><p> 圖4-9 客戶端1002接收文件前后窗口</p><p> 使用完畢后,用戶還可以注銷賬戶。在歡迎界面點擊注銷,然后輸入賬號以及密碼即可以實現(xiàn)注銷。</p><p> 圖4-10 客戶端1001注銷成功 </p><p> 上述運(yùn)行結(jié)果表明,client端間的消息收取以及文件
108、傳送可以通過server端被對方成功接收,并且成功實現(xiàn)了系統(tǒng)的基本功能,如私聊給功能、群聊功能。對于上下線提醒,我以列表的方式展示出來在線好友即可,沒有以打印信息的形式展示將其顯示出來。而且成功的實現(xiàn)了client端的注冊與注銷。</p><p><b> 結(jié)束語</b></p><p> 通過本次對Linux系統(tǒng)的聊天軟件的設(shè)計,讓我在實踐中積累總結(jié)了不少的經(jīng)驗
109、,鍛煉了我的獨立分析和實際動手能力,加深了對Linux操作系統(tǒng)和TCP/IP協(xié)議的了解提高了對復(fù)雜的問題的分析、解決、概括總結(jié)的能力,對網(wǎng)絡(luò)編程項目的開發(fā)、設(shè)計過程有初步認(rèn)識。</p><p> 經(jīng)過近了兩周的設(shè)計和開發(fā),聊天軟件的設(shè)計完畢。其功能基本符合課題需求,能夠?qū)崿F(xiàn)基本的網(wǎng)絡(luò)聊天功能。但是由于課程設(shè)計時間較短,還有許多存在不盡如人意的地方,還有待于我們進(jìn)一步完善。但我從中學(xué)到了不少的東西,真正的理解到,
110、理論與實踐之間還是有很大的距離,這肯定利于我們以后的工作。這次畢業(yè)設(shè)計使我明白,在以后的學(xué)習(xí)工作中,要不斷的完善自己的知識體系結(jié)構(gòu),注意理論和實踐的結(jié)合,學(xué)知識關(guān)鍵在于要學(xué)活,而不能死記死搬書本上的知識,關(guān)鍵在于活學(xué)活用,這樣所學(xué)到的東西才是我們自己的東西,才會達(dá)到了學(xué)習(xí)的真正目的!</p><p><b> 致謝</b></p><p> 短短的設(shè)計時間已經(jīng)結(jié)束
111、了,非常感謝指導(dǎo)老師—**老師的幫助,老師對我們的課程設(shè)計特別熱心,給予了我們無微不至的幫助。她繁忙的工作中對我的設(shè)計提了許多寶貴的建議和意見,使我從對設(shè)計課題的茫然到逐漸清晰,最后才使設(shè)計得以完成。也很感謝近四年來教我的各科任課老師,是他們豐富我的專業(yè)知識,能夠運(yùn)用于設(shè)計中。同時也感謝我周圍的同學(xué),他們對我的幫助也很多。最后要感謝母校給我提供這么好的學(xué)習(xí)環(huán)境。</p><p> 敲完最后一個字符,重新從頭細(xì)細(xì)
112、閱讀早已不陌生的文字,我感觸頗多。雖然其中沒有什么值得特別炫耀的成果,但對我而言,是寶貴的。它是無數(shù)教誨、關(guān)愛和幫助的結(jié)果。</p><p> 我要感謝我的指導(dǎo)教師**老師 雖身負(fù)教學(xué)、科研重任,仍抽出時間,不時召集我和同門以督責(zé)課業(yè),耳提面命,殷殷之情盡在諄諄教誨中。這篇論文更傾注了她的大量心血。從初稿到定稿,**老師不厭其煩,一審再審,大到篇章布局的偏頗,小到語句格式的瑕疵,都一一予以指出。同時,我要感謝電
113、氣與信息工程學(xué)院所有給我上過課老師,是他們傳授給我方方面面的知識,拓寬了我的知識面,培養(yǎng)了我的功底,對論文的完成不無裨益。我還要感謝學(xué)院的各位工作人員,他們細(xì)致的工作使我和同學(xué)們的學(xué)習(xí)和生活井然有序。</p><p> 謹(jǐn)向我的父母和家人表示誠摯的謝意。他們是我生命中永遠(yuǎn)的依靠和支持,他們無微不至的關(guān)懷,是我前進(jìn)的動力;他們的殷殷希望,激發(fā)我不斷前行。沒有他們就沒有我,我的點滴成就都來自他們。</p>
114、;<p> 讓我依依不舍的還有各位學(xué)友、同門和室友。在我需要幫助的時候,同學(xué)們伸出溫暖的雙手,鼎立襄助。能和相遇、相交、相知是人生的一大幸事。</p><p> 本論文的完成遠(yuǎn)非終點,文中的不足和淺顯之處則是我新的征程上一個個新的起點。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 朱文凱,陶波,何
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于Linux操作系統(tǒng)的智能儀器軟件設(shè)計.pdf
- linux平臺下的聊天軟件的設(shè)計與開發(fā)畢業(yè)設(shè)計
- linux網(wǎng)絡(luò)聊天畢業(yè)設(shè)計
- linux操作系統(tǒng)下基于qt的bt下載軟件的設(shè)計與實現(xiàn)論文
- 基于Linux實時操作系統(tǒng)的分析和設(shè)計.pdf
- 操作系統(tǒng)課程設(shè)計--簡單的聊天程序
- 操作系統(tǒng)課程設(shè)計--簡單的聊天程序
- linux操作系統(tǒng)下基于qt的bt下載軟件的設(shè)計與實現(xiàn)論文
- linux操作系統(tǒng)課程設(shè)計
- 基于Linux的實時操作系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 畢業(yè)設(shè)計--基于plc的機(jī)械手自動操作系統(tǒng)設(shè)計
- 基于Linux的安全操作系統(tǒng)—SLinux的研究與設(shè)計.pdf
- 基于LINUX的安全操作系統(tǒng).pdf
- 基于Linux操作系統(tǒng)的多點觸摸系統(tǒng)的設(shè)計與實現(xiàn).pdf
- linux課程設(shè)計報告--linux操作系統(tǒng)應(yīng)用
- 基于LINUX的操作系統(tǒng)實驗平臺的設(shè)計與實現(xiàn).pdf
- linux操作系統(tǒng)應(yīng)用課程整體設(shè)計
- 安全Linux操作系統(tǒng)的設(shè)計與研究.pdf
- linux操作系統(tǒng)課程整體教學(xué)設(shè)計
- linux操作系統(tǒng)應(yīng)用課程整體設(shè)計
評論
0/150
提交評論