基于linux網(wǎng)絡(luò)聊天室的設(shè)計_第1頁
基于linux網(wǎng)絡(luò)聊天室的設(shè)計_第2頁
基于linux網(wǎng)絡(luò)聊天室的設(shè)計_第3頁
基于linux網(wǎng)絡(luò)聊天室的設(shè)計_第4頁
基于linux網(wǎng)絡(luò)聊天室的設(shè)計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Linux操作系統(tǒng)課程設(shè)計報告 學(xué) 院 工商學(xué)院 專 業(yè) 計算機科學(xué)與技術(shù) 班 級 計1341 學(xué)生姓名:王慢,韓霞,孫潔茹,李強,蔣濤課程設(shè)計任務(wù)書題 目 基于linux網(wǎng)絡(luò)聊天室的設(shè)計實驗?zāi)康模篖inux操作系統(tǒng)課程設(shè)計B是一門在課程Linux操作系統(tǒng)與程序設(shè)計B后獨立開設(shè)的實驗課程。這一門實驗課程的開設(shè)目的是為了通過學(xué)生獨立完成一個基于Linux平臺的較大型應(yīng)用程序,鞏固課堂上學(xué)到的Linux平臺上的編程規(guī)范、技術(shù)和技巧,培養(yǎng)學(xué)生的編寫較大型程序的能力和提高學(xué)生綜合應(yīng)用素質(zhì)。本課程設(shè)計實驗主要圍繞Linux平臺上主流的基礎(chǔ)技術(shù)展開,這些技術(shù)包括:Linux的進程、線程通信和同步技術(shù); s

2、ocket網(wǎng)絡(luò)通信技術(shù)等,這些技術(shù)可以集中體現(xiàn)并應(yīng)用在并發(fā)程序設(shè)計中。通過并發(fā)程序的設(shè)計與開發(fā),培養(yǎng)學(xué)生底層軟件開發(fā)的能力,并為將來從事UNIX/Linux平臺開發(fā)、嵌入式開發(fā)等相對高端的軟件開發(fā)工作打下基礎(chǔ)。課程設(shè)計的具體內(nèi)容與要求:1. 閱讀(一個)示例代碼,理解并發(fā)程序設(shè)計并掌握基于Linux平臺并發(fā)程序設(shè)計的方法。2. 在充分理解示例程序的基礎(chǔ)上,重新定義和完善程序的功能,定義數(shù)據(jù)結(jié)構(gòu),劃分程序的功能模塊和接口,明確每個模塊功能以及相互關(guān)系。3. 完成程序的詳細設(shè)計和編碼,并測試。4. 書寫并提交文檔 目錄1引言11.1課程設(shè)計背景11.2課程設(shè)計目的21.3課程設(shè)計內(nèi)容42 技術(shù)介紹

3、72.1TCP和UDP介紹2.2客戶/服務(wù)器模型2.3網(wǎng)絡(luò)套接字(socket)的概念2.4多線程的概念3 系統(tǒng)設(shè)計103.1 系統(tǒng)結(jié)構(gòu)設(shè)計3.2通信模塊設(shè)計4模塊實現(xiàn)124.1系統(tǒng)調(diào)用相關(guān)函數(shù)4.2 系統(tǒng)實現(xiàn)過程說明5 運行效果15結(jié)束語參考文獻18附錄19-24基于linux網(wǎng)絡(luò)聊天室的設(shè)計 摘 要 本課程設(shè)計主要實現(xiàn)一個Linux下的局域網(wǎng)聊天工具的設(shè)計。該設(shè)計主要分為兩部分,客戶端部分和主機部分。運行服務(wù)器端程序可以和任意運行了客戶端程序的主機進行通信,通信內(nèi)容能夠通過終端顯示出來。兩個部分都使用C語言,利用vi編輯器,通過Berkeley套接口編程實現(xiàn)相關(guān)功能。1 引 言1.1課程設(shè)

4、計背景Linux是一種針對PC計算機和工作站的操作系統(tǒng),它具有像Windows和Mac那樣的功能齊全的圖形用戶界面(GUI,Graphical User Interface)。Linus Torvald和其它的遍布世界各地的編程人員共同開發(fā)的1。 提到Linux我們不能不提GNU和Unix。Richard M.Stallman建立的自由軟件聯(lián)盟出版了兩種許可證,GNU通用公共許可證(GNU Gneral Public License,GPL)和GNU函數(shù)庫通用公共許可證(GNU Library Gneral Public License,LGPL)。大部分GNU工程的軟件和文檔是以GNU通用公

5、共許可證發(fā)行的,但是有一些庫是以GNU函數(shù)庫通用公共許可證發(fā)行的。按照GNU通用公共許可證的規(guī)定,Linux的源代碼可以自由獲取,這滿足了我們學(xué)習(xí)該系統(tǒng)的強烈愿望。GPL充分體現(xiàn)了Stallman的思想:只要用戶所做的修改是同等自由的,用戶可以自由地使用、拷貝、查詢、重用、修改甚至發(fā)布這個軟件。通過這種方式,GPL保證了Linux(以及同一許可證下的大量其他軟件)不僅現(xiàn)在自由可用,而且皮后經(jīng)過任何修改這后都仍然可以自由使用。 Unix是由ATT貝爾實驗室的Ken Thompson和Dennis Ritchie于1969年在一臺已經(jīng)廢棄了的PDP-7上開發(fā)的;最初它是一個用匯編語言寫成的單用戶操

6、作系統(tǒng)。后來,他們又在PDP-11上用C語言重新編寫(發(fā)明C語言的部分目的就在于此),把Unix做成為了一個文本處理系統(tǒng),這使Unix在貝爾實驗室得到廣泛的應(yīng)用。Unix的最初版本免費提供給許多知名的大學(xué)的計算機系使用。加州大學(xué)伯克利分校的計算機系就是其中的一名,并地Unix進行了修改增加了許多新的特點,這就是主為人知的BSC版本的Unix。與此同時,其它獨立開發(fā)的Unix版本也開始萌生。Unix不斷發(fā)展了,各種版本被應(yīng)用到不同的計算機使用。而Linux最初是專門為基于Intel的個人計算機設(shè)計的。(1)Linux的昨天 1991年,一名叫Linus Torvalds的芬蘭大學(xué)生對Unix各種

7、版本對于80386類的機器的脆弱支持十分不滿,他決定要開發(fā)出一個全功能的、支持POSIX標(biāo)準(zhǔn)的、類Unix的操作系統(tǒng)內(nèi)核,該系統(tǒng)吸收了BSD和System V 的優(yōu)點,同進摒棄了它們的缺點。他獨立把這個內(nèi)核開發(fā)到0.02版,這個版本已經(jīng)可以運行g(shù)cc、bash和很少的一些應(yīng)用程序。后來,他又開始了在因特網(wǎng)上尋求廣泛的幫助。 1994年,Linux已經(jīng)升級到1.0版本。它的源代碼量也呈指數(shù)形式增長,實現(xiàn)了基本的TCP/IP功能,此時Linux已經(jīng)擁有大約10萬的用戶。(2) Linux的今天 作為一各服務(wù)器級的操作系統(tǒng),Linux已經(jīng)成熟了?,F(xiàn)在的Linux內(nèi)核由150多行代碼組成,能作為Web

8、服務(wù)器平臺,也為越來越多的商業(yè)用戶提供文件和打印服務(wù)。它既被當(dāng)作郵件服務(wù)器的一種候選平臺,也被當(dāng)作一種強壯而安全的防火墻。 Linux的企業(yè)級特性,比如支持多處理器、支持大型文件系統(tǒng)、日志文件系統(tǒng)以及密集型計算和高可用性集群技術(shù),也逐步成熟。 桌面上的Linux也在繼續(xù)完善。KDE桌面提供的圖形用戶界面在易用性和可配置方面都能和微軟的Windows相媲美。(3) Linux的明天 Linux最強大的生命力在于其公開的開發(fā)過程。每個人都有可以自由獲取內(nèi)核源程序,每個人都有要不得以運載源程序加以修改,而后他人也可以自由獲取你修改后的源程序。Linux這種獨特的自由流暢的開發(fā)模型已被命名為bazaa

9、r(集市模型)。Bazaar開發(fā)模型通過重視實驗,征集并充分利用早期的反饋,對巨大數(shù)量的腦力資源進行平衡配置,可以開發(fā)出更優(yōu)秀的軟件。本聯(lián)盟就是想通過bazaar開發(fā)模型,在網(wǎng)上召集一些Linux的愛好者,開發(fā)出更優(yōu)秀的操作系統(tǒng)或軟件。1.2課程設(shè)計目的本課程設(shè)計主要實現(xiàn)一個Linux下的局域網(wǎng)聊天工具的設(shè)計。該設(shè)計主要分為兩部分,客戶端部分和主機部分。運行服務(wù)器端程序可以和任意運行了客戶端程序的主機進行通信,通信內(nèi)容能夠通過終端顯示出來。兩個部分都使用C語言,利用vi編輯器,通過Berkeley套接口編程實現(xiàn)相關(guān)功能。要求:(1)主要實現(xiàn)一個Linux下的局域網(wǎng)聊天工具的設(shè)計,進一步掌握vi

10、,gcc等工具的使用,并且熟悉Linux下的網(wǎng)絡(luò)編程,以及多線程編程。(2)通過實際項目的分析、安裝、配置、測試等工作,掌握用Linux系統(tǒng)下的網(wǎng)絡(luò)聊天室的應(yīng)用。1.3課程設(shè)計內(nèi)容本課程設(shè)計主要實現(xiàn)一個Linux下的局域網(wǎng)聊天工具的設(shè)計。該設(shè)計主要分為兩部分,客戶端部分和主機部分。運行服務(wù)器端程序可以和任意運行了客戶端程序的主機進行通信,通信內(nèi)容能夠通過終端顯示出來。兩個部分都使用C語言,利用vi編輯器,通過Berkeley套接口編程實現(xiàn)相關(guān)功能。2 技術(shù)介紹2.1TCP和UDP介紹(1)UDP通信UDP是用戶數(shù)據(jù)報協(xié)議的簡稱。它是以中午連接的邏輯通信信道。UDP在傳送數(shù)據(jù)之前不需要先建立連接

11、,遠地主機的傳輸層在收到udp數(shù)據(jù)報后,不需要給出任何確認(rèn),所以不能保證其交付時可靠。它的特點是:因無連接,故提供的是不可靠的信道,但也是因無連接而具有很好的傳輸效率。(2)TCP通信 TCP是傳輸控制協(xié)議的簡稱,它是提供一條全雙工的、可靠的信道。TCP提供面向連接的服務(wù),在傳送數(shù)據(jù)之前必須先建立連接,數(shù)據(jù)傳送結(jié)束后要釋放連接。由于TCP要提供可靠的、面向連接的運輸服務(wù),所以不可避免地增加了許多系統(tǒng)開銷,比如確認(rèn)、流量控制、計時器以及連接管理等都需要占用許多系統(tǒng)的時空資源。 兩個計算機之間如果使用TCP通信,其連接過程需要三次握手實現(xiàn),如實驗圖2-1所示。圖2.1 用三次握手建立TCP連接 對

12、于兩個計算機之間連接的釋放過程也需要類似的3次握手的互相確認(rèn)的過程,如實驗圖2-2所示。圖2.2 TCP連接的釋放過程2.2客戶/服務(wù)器模型在客戶/服務(wù)器模型中,多個相互通信的計算機都作為客戶端,與網(wǎng)絡(luò)服務(wù)器進行連接,并通過服務(wù)器進行信息的傳遞3。所以多個客戶端之間的通信就變?yōu)榱丝蛻舳伺c服務(wù)端的通信。所以,采用客戶/服務(wù)器模型進行網(wǎng)絡(luò)聊天需要分別編寫服務(wù)器端和客戶端的程序,服務(wù)器和客戶端之間相互通信的同步關(guān)系和各自的程序流程如實驗圖2-3所示。圖2.3 Socket通信流程圖2.3網(wǎng)絡(luò)套接字(socket)的概念Socket接口上TCP/IP網(wǎng)絡(luò)應(yīng)用程序接口(API),它提供了許多函數(shù)和例程,

13、程序員可以使用它們來開發(fā)TCP/IP網(wǎng)絡(luò)應(yīng)用程序。使用Socket接口進行網(wǎng)絡(luò)通信的過程如圖1-3所示,簡要步驟如下:(1) 建立一個Socket.(2) 按要求配置socket,將socket連接到遠程主機或給socket指定以各本地協(xié)議端口。(3) 按要求通過socket發(fā)送和接受數(shù)據(jù)。(4) 關(guān)閉此socket。這是通過Socket實現(xiàn)點對點通信需要掌握的4個編程要點。2.4多線程的概念上述點對點通信的實現(xiàn)知識完成了主機進程與服務(wù)器進程之間的連接,建立連接的進程之間是一對一的聯(lián)系,即主機的一個進程與服務(wù)器的一個進程之間建立的連接。而每個進程進行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個任務(wù)

14、,這兩個任務(wù)通過一個端口地址發(fā)送和接收。對于多個并發(fā)的任務(wù)需要創(chuàng)建多個線程或線程去實現(xiàn)。使用一個進程去完成發(fā)送信息是沒有問題的,因為發(fā)送總是主動的;而使用同一個進程再去完成接受信息去不一定會成功,因為接受信息是被動的,所以當(dāng)沒有信息可以接收時,該進程就會被阻塞,從而導(dǎo)致發(fā)送任務(wù)也一起被阻塞。同一個端口的發(fā)送和接收是兩個并發(fā)任務(wù),應(yīng)該由兩個不同的任務(wù)去分別完成信息的發(fā)送和接收。這樣,當(dāng)接收信息任務(wù)因沒有信息而被阻塞時,不至于影響發(fā)送任務(wù)的執(zhí)行。那么,發(fā)送和接收兩個任務(wù)是使用兩個進程還是兩個進程去完成呢?在網(wǎng)絡(luò)通信中,端口地址是以進程為單位進程分配的,而一個進程與外界的消息發(fā)送與接收必須通過分配給

15、它的同一個端口進行。因此,不能通過創(chuàng)建進程方式來解決上訴問題,因為兩個進程會分別對應(yīng)兩個不同的端口,而發(fā)送和接收必須使用同一端口。線程不是資源分配的單位,所以如果使用兩個線程不會對線程分配新的端口。因此,本實驗需要使用兩個線程去分別完成發(fā)送和接收信息的任務(wù),這兩個線程共享其進程擁有的統(tǒng)一個端口地址。由于創(chuàng)建進程的進程本身會作為一個線程來調(diào)度,所以只需要再創(chuàng)建一個線程專門負(fù)責(zé)接收信息就可以了。因此,對于從每個客戶端發(fā)來的請求,服務(wù)器端都要創(chuàng)建相應(yīng)的線程去接收并處理;同理,對于客戶端而言,也要創(chuàng)建一個線程去讀取服務(wù)器端發(fā)來的信息。3 系統(tǒng)設(shè)計3.1 系統(tǒng)結(jié)構(gòu)設(shè)計本系統(tǒng)采用客戶/服務(wù)器模型,在TCP

16、/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個進程間相互作用的主要模式是客戶/服務(wù)器模式(Client/Servermodel),即客戶向服務(wù)器發(fā)出服務(wù)請求,服務(wù)器接收到請求后,提供相應(yīng)的服務(wù)。客戶/服務(wù)器模式的建立基于以下兩點:首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機提供服務(wù),資源較少的客戶請求服務(wù)這一非對等作用。其次,網(wǎng)間進程通信完全是異步的,相互通信的進程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機制為希望通信的進程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是客戶端/服務(wù)器模式的TCP/IP。在客戶/服務(wù)器模型中,多個相互通信的計算機都作

17、為客戶端,與網(wǎng)絡(luò)服務(wù)器進行連接,并通過服務(wù)器進行信息的傳遞4。所以多個客戶端之間的通信就變?yōu)榱丝蛻舳伺c服務(wù)端的通信。服務(wù)器端和客戶端的主要組成如下:服務(wù)器端:套接字創(chuàng)建函數(shù)Socket(),端口綁定函數(shù)Bind(),套接口監(jiān)聽函數(shù)Listen(),接受連接函數(shù)Accept(),數(shù)據(jù)收發(fā)函數(shù)Read()和Write(),以及套接口關(guān)閉函數(shù)Close()。客戶端:套接口創(chuàng)建函數(shù)Socket(),套接口連接函數(shù)Connect(),數(shù)據(jù)收發(fā)函數(shù)Read()和Write(),以及套接口關(guān)閉函數(shù)Close()。3.2通信設(shè)計首先運行服務(wù)器端程序,通過Socket()函數(shù)會建立一個套接字,然后通過Bind(

18、)函數(shù)綁定一個端口,然后調(diào)用Listen()在套接字指定的端口上開始傾聽,利用Accept()從完全建立連接的隊列中接受一個連接,連接獲得后使用Read()和Write()函數(shù)進行通信。通信結(jié)束后調(diào)用Close()關(guān)閉套接字描述符。運行客戶端的程序,調(diào)用Socket()函數(shù)建立一個套接字,使用Connect()函數(shù)與服務(wù)器端進行連接,連接完成后,使用Write()和Read()與服務(wù)器端進行通信,通信結(jié)束后調(diào)用close()關(guān)閉套接字描述符。4系統(tǒng)實現(xiàn)4.1系統(tǒng)調(diào)用相關(guān)函數(shù)(1)Socket() 作用:socket函數(shù)為客戶機或服務(wù)器創(chuàng)建一個sokcet格式:int socket(int fa

19、mily,int type,int protocol); 參數(shù)說明: Family:表示地址族,可以去AF_UNLX和AF_INT。其中,AF_UNLX只能夠用于單一的UNIX系統(tǒng)進程間通信;AF_INT是針對Internet的,因而可以允許在遠程主機之間通信,實驗中使用AF_INT。Type:網(wǎng)絡(luò)程序所采用的通信協(xié)議,可以取SOCK_STREAM或SOCK_DGRAM。其中,SOCK_STREAM表明使用的是TCP協(xié)議,這樣提供按順序、可靠、雙向、面向連接的比特流;SOCKE_DGRAM表明使用的是UDP協(xié)議,這樣只會提供定長、不可靠、無連接的通信。(2)bind( )格式: int bin

20、d(int sockfd,struct sockaddr *addr,int addrlen); 參數(shù)說明: Sockfd:socket的文件描述符號。 Sockaddr:表示名字所用的一個數(shù)據(jù)結(jié)構(gòu),用來保存地址(包括IP地址和端口) Addrlen:設(shè)置結(jié)構(gòu)大小長度。(3)listen()格式: int listen(int sockfd, int backlog); 作用:監(jiān)聽連接信號,和accepted函數(shù)合同。 參數(shù)說明: Sockfd:表示socket調(diào)用返回的文件描述符。 Backlog:表示接入隊列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許20個,也可以子定義510個。(4)accept()

21、 格式: Int accept (int sockfd, void *addr, int *addrlen); 作用:與listen函數(shù)合用,監(jiān)聽信息、接收客戶端請求。 參數(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)中客戶及連接服務(wù)器時使用,connect必須在bind后使用。 參數(shù)作

22、用: Sockfd:表示socket的文件描述符。 Serv-addr:表示村訪目的端口和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ù)報socket內(nèi)部之間的通信。(7)close( ) 和 shutdown ( )格式: Close( int sockfd)或 I

23、nt shutdown(int sockfd , int how); 參數(shù)說明: How的值為下面一種: 0-不允許繼續(xù)接收; 1-不允許繼續(xù)發(fā)送; 2-不允許繼續(xù)發(fā)送和接收。(8)有關(guān)線程的系統(tǒng)調(diào)用函數(shù)pthread_create()、pthread_join()4.2 系統(tǒng)實現(xiàn)過程說明(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_

24、ANY該函數(shù)把由小數(shù)點分開的十進制IP地址轉(zhuǎn)為unsinged long 類型,而在實驗中所使用的為INADDR_ANY,使用利用自已的IP地址自動填充。1)利用bind函數(shù)綁定端口和IP地址。My_addr.sin_family=AF_INET; /*將地址族類型設(shè)定好 */My_addr.sin_port=htons(MYPORT; /* 將端口給其賦值*/My_addr.sin_addr.s_addr=INADDR_ANY; /*用連接地址自動填充ip*/Bind(sockfd,(stuct sockaddr*)&my_addr,sizeof(stuct sockaddr);/*sock

25、fd 是分配的socket名字,my-addr則便是分配好的端口與IP,用bind綁定*/2)利用listen監(jiān)聽請求(2) 發(fā)送請求1)利用gethostbyname獲取主機信息。2)初始化socket端口。3)利用connect函數(shù)將自己的IP地址等信息發(fā)送到主機,等待主機調(diào)用accept函數(shù)來接受請求。(3) 主機接收請求,進行數(shù)據(jù)通信1)主機利用accept接收請求。2)創(chuàng)建子進程,顯示歡迎信息;3)接收返回信息,顯示連接成功,并推出連接;4)關(guān)閉客戶端口socket;5)關(guān)閉服務(wù)端socket,結(jié)束子線程。5 運行效果(1)在編寫完TCP服務(wù)端程序server.c后,用 gcc lp

26、thread o server.c server 生成程序server。(2)在編寫完TCP客戶端程序client.c后,用gcc lpthread o client.c client 生成程序client(3)在主機上打開一窗口,運行server。(4)再打開另一個窗口或者在另一個主句上打開一個窗口,運行client,輸入服務(wù)器的IP地址,并檢查器結(jié)果的正確性。輸入:【主】# ./server【從】# ./client 127.0.0.1輸出:【主】#server:got connection from 127.0.0.1(5)客戶端、服務(wù)器端窗口之間以及交錯發(fā)送信息的方式相互發(fā)送和接收信息

27、。1) 客戶端、服務(wù)器端窗皆通過鍵盤輸入消息內(nèi)容平回車,以發(fā)送消息給對方;2) 消息中若使用空格,則作為本條消息結(jié)束及下一條消息的開始;3) 輸入exit則推出運行。開始運行后,服務(wù)器端窗口的執(zhí)行順序為:1) 輸入“hi nihao”發(fā)送給客戶端,如圖5.1所示。圖5.1 服務(wù)器發(fā)送消息2) 接收客戶端發(fā)來的”ni hao”,如圖5.2所示。圖5.2 接收客戶端消息3) 輸入exit結(jié)束。開始運行后,客戶端窗口的執(zhí)行順序為:1) 接收服務(wù)器端發(fā)來的消息“hinihao”,如圖5.3所示。圖5.3接收服務(wù)器端消息2) 發(fā)送消息“hinihao”給服務(wù)器端如圖5.4所示。圖5.4 客戶端發(fā)送消息3

28、) 鍵入exit結(jié)束。上述運行結(jié)果表明,客戶端與服務(wù)器端之間傳遞的消息已被對方成功接收。6 結(jié)束語這次課程設(shè)計可謂收獲頗大,首先從一開始對 linux一無所知甚至是畏懼 ,到做完實驗后有了一定程度的了解,如果沒有這次實驗 ,我想我很難有機會去接觸從而進一步熟悉 linux這個操作系統(tǒng)以及在 linux下的編程.通過實驗我認(rèn)識到了系統(tǒng)調(diào)用的實現(xiàn)原理 ,系統(tǒng)信息和狀態(tài)的讀取 ,特別是最后一個實驗應(yīng)該說比較具有代表性 ,是一個很好的 linux環(huán)境下編程的例子 .也讓我從中學(xué)到了不少 linux的知識.經(jīng)過近了兩周的設(shè)計和開發(fā),網(wǎng)絡(luò)聊天室的設(shè)計設(shè)計完畢。其功能基本符合用戶需求,能夠簡單的網(wǎng)絡(luò)聊天功能

29、。但是由于課程設(shè)計時間較短,還有許多不盡如人意的地方,還有待于我們進一步完善其功能。但我從中學(xué)到了不少的道理,真正的理解到,理論與實踐之間還是有很大的距離,這必將有利于我們以后的學(xué)習(xí)。通過此次課程設(shè)計,使我更加扎實的掌握了有關(guān)Linux方面的知識,在設(shè)計過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗不足?;仡櫰鸫苏n程設(shè)計,至今我仍感慨頗多,從理論到實踐,在這段日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得

30、了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,但可喜的是最終都得到了解決。實驗過程中,也對團隊精神的進行了考察,讓我們在合作起來更加默契,在成功后一起體會喜悅的心情。果然是團結(jié)就是力量,只有互相之間默契融洽的配合才能換來最終完美的結(jié)果。實踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵。在本次課題程序設(shè)計中,我學(xué)到了很多東西,通過本次課題程序設(shè)計,無論在理論上還是在實踐中,我的計算機應(yīng)用水平得到了很大的提升,這對

31、于今后的工作和學(xué)習(xí)都是一種巨大的財富。參考文獻1趙敏哲,64位Linux操作系統(tǒng)與應(yīng)用實例M. 北京:機械工業(yè)出版社,20012龐麗萍,操作系統(tǒng)原理(第三版) M. 武漢:華中科技大學(xué)出版社,20003張饒學(xué),Linux網(wǎng)絡(luò)編程M.北京:清華大學(xué)出版社,20004金鐘夫,杜剛.淺析socket網(wǎng)絡(luò)編程J. 微計算機信息,2002,3-2,87-895王群,許中萬.Linux優(yōu)勢分析J.計算機與現(xiàn)代化,2003(10):7-8附 錄服務(wù)端源程序清單如下,文件名為server.c#include#include#include#include#include#include#include#inc

32、lude#include#define MYPORT 3490#define BACKLOG 10 #define MAXDATASIZE 1024int sockfd,new_fd;pthread_t accthread,recthread;void recmessage(void) while(1) int numbytes; char bufMAXDATASIZE; if(numbytes = recv(new_fd,buf,MAXDATASIZE,0) = -1)perror(recv); exit(1); bufnumbytes = 0; if(strcmp(buf,exit) =

33、0)printf(Client is closedn);close(new_fd);close(sockfd);exit(1);printf(Client:%sn,buf); void acceptconnect(void) / *與listen函數(shù)合用,監(jiān)聽信息、接收客戶端請求*/ struct sockaddr_in their_addr; int sin_size; sin_size = sizeof(struct sockaddr_in); if(new_fd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size) = -1)

34、perror(accept); exit(1); printf(server:got connection from %sn,inet_ntoa(their_addr.sin_addr); if(pthread_create(&recthread,NULL,(void *)recmessage,NULL)!= 0) printf(Create thread error!rn); exit(1); int main(void) struct sockaddr_in my_addr; if(sockfd = socket(AF_INET,SOCK_STREAM,0) = -1) perror(so

35、cket); exit(1); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr) = -1) perror(bind); exit(1); if(listen(sockfd,BACKLOG) = -1) /*監(jiān)聽連接信號*/ perror(listen)

36、; exit(1); if(pthread_create(&accthread,NULL,(void *)acceptconnect,NULL) != 0) printf(Create thread error!rn); exit(1); while(1) char msgMAXDATASIZE; scanf(%s,msg); if(send(new_fd,msg,strlen(msg),0) = -1) perror(send); close(new_fd); exit(1); if(strcmp(msg,exit) = 0) printf(Byebye!n); close(new_fd); close(sockfd); exit(1); return 0;客戶端源程序清單如下,文件名為client.c#include#include#include#include#include#include#include#

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論