【正文】
結(jié)束語 通過本次課程設(shè)計對 Linux 網(wǎng)絡(luò)聊天室的設(shè)計 ,確實(shí)積累和總結(jié)了不少的經(jīng)驗(yàn),鍛煉了我的獨(dú)立工作和實(shí)際動手能力,加深了對計算機(jī) 網(wǎng)絡(luò)中 socket 工作原理及其相互聯(lián)系的認(rèn)識,提高了對復(fù)雜的綜合性實(shí)踐環(huán)節(jié)具有分析問題、解決問題、概括總結(jié)的實(shí)際工作能力,對 網(wǎng)絡(luò)編程 項(xiàng)目的開發(fā)、設(shè)計過程有初步認(rèn)識。 1) 客戶端、服務(wù)器端窗皆通過鍵盤輸入消息內(nèi)容平回車,以發(fā)送消息給對方; 2) 消息中若使用空格,則作為本條消息結(jié)束及下一條消息的開始; 3) 輸入 exit 則推出運(yùn)行。 close(sockfd)。recthread,NULL,(void *)recmessage,NULL))!=0){ printf(Create thread error!\r\n)。 = htons(PORT)。 struct sockaddr_in their_addr。 exit(1)。 close(sockfd)。 exit(1)。(),8)。 exit(1)。 sin_size = sizeof(struct sockaddr_in)。\039。 2)創(chuàng)建子進(jìn)程,顯示歡迎信息; 3)接收返回信息,顯示連接成功,并推出連接; 4)關(guān)閉客戶端口 socket; 《 基于 Linux網(wǎng)絡(luò)聊天室的設(shè)計 》 第 13 頁 共 21 頁 5)關(guān)閉服務(wù)端 socket,結(jié)束子線程。 /*將地址族類型設(shè)定好 */ =htons(MYPORT。 作用:用于流式 socket、數(shù)據(jù)報 socket 內(nèi)部之間的通信。 Addrlen:表示地址的長度。 (3) listen() 格式: int listen(int sockfd, int backlog)。 參數(shù)說明: Family:表示地址族,可以去 AF_UNLX 和 AF_INT。這樣,當(dāng)接收信息任務(wù)因沒有信息而被阻塞時,不至于影響發(fā)送任務(wù)的執(zhí)行。 (3) 按要求通過 socket 發(fā)送和接受數(shù)據(jù)。 由于 TCP 要提供可靠的、面向連接的運(yùn)輸服務(wù),所以不可避免地增加了許多系統(tǒng)開銷,比如確認(rèn)、流量控制、計時器以及連接管理等都需要占用許多系統(tǒng)的時空資源。本聯(lián)盟就是想通過 bazaar 開發(fā)模型 ,在網(wǎng)上召集一些 Linux 的愛好者 ,開發(fā) 《 基于 Linux網(wǎng)絡(luò)聊天室的設(shè)計 》 第 5 頁 共 21 頁 出更優(yōu)秀的操作系統(tǒng)或軟件。它既被當(dāng)作郵件服務(wù)器的一種候選平臺 ,也被當(dāng)作一種強(qiáng)壯而安全的防火墻。而Linux 最初是專門為基于 Intel 的個人計算機(jī)設(shè)計的。 GPL 充分體現(xiàn)了 Stallman 的思想:只要用戶所做的修改是同等自由的 ,用戶可以自由地使用、拷貝、查詢、重用、修改甚至發(fā)布這個軟件。但對很多習(xí)慣于 Windows 操 作系統(tǒng)的人來說, Linux 的操作不夠人性化、交互界面不夠美觀,這給 Linux 操作系統(tǒng)的普及帶來了很大的阻礙。 可以在單機(jī)上開辟兩個窗口分別運(yùn)行客戶、服務(wù)器端的程序,或者將兩臺主機(jī)連接分別作為客戶和服務(wù)器的方式。 關(guān)鍵 詞 網(wǎng)絡(luò)聊天室 ; linux ; socket ; vi Abstract Design and Implementation of the course in under linux simple work chat rooms. Prepared in the Linux and debugging serverside processes and client to achieve the client, server and munications link between. Can open up two windows on the standalone operation, respectively, customers, serverside procedures, or to connect two hosts, respectively, as the way the client and server. The design of the work socket using the socket and multithreaded applications in the work, and under linux based vi editor. The program by the success of gcc debug debugger, you can chat in the use of standalone work. Key words Network Chat Rooms。作為一種操作系統(tǒng) ,它具有與 Unix,Mac,Windows 和 Windows NT同樣的功能。后來 ,他們又在 PDP11 上用 C 語言重新編寫(發(fā)明 C 語言的部分目的就在于此) ,把 Unix 做成為了一個文本處理系統(tǒng) ,這使 Unix 在貝爾實(shí)驗(yàn)室得到廣泛的應(yīng)用。后來 ,他又開始了在因特網(wǎng)上尋求廣泛的幫助。 KDE 桌面提供的圖形用戶界面在易用性和可配置方面都能和微軟的 Windows 相媲美。 UDP 在傳送數(shù)據(jù)之前不需要先建立連接,遠(yuǎn)地主機(jī)的傳輸層在收到 udp 數(shù)據(jù)報后,不需要給出任何確認(rèn),所以不能保證其交付時可靠。 《 基于 Linux網(wǎng)絡(luò)聊天室的設(shè)計 》 第 7 頁 共 21 頁 圖 12 TCP 連接的釋放過程 客戶 /服務(wù)器模型 在客戶 /服務(wù)器模型中,多個相互通信的計算機(jī)都作為客戶端,與網(wǎng)絡(luò)服務(wù)器進(jìn)行連接,并通過服務(wù)器進(jìn)行信息的傳遞。 多線程的概念 上述點(diǎn)對點(diǎn)通信的實(shí)現(xiàn)知識完成了主機(jī)進(jìn)程與服務(wù)器進(jìn)程之間的連接,建立連接的進(jìn)程之間是一對一的聯(lián)系,即主機(jī)的一個進(jìn)程與服務(wù)器的一個進(jìn)程之間建立的連接。線程不是資源分配 的單位,所以如果使用兩個線程不會對線程分配新的端口。 Type:網(wǎng)絡(luò)程序所采用的通信協(xié)議,可以取 SOCK_STREAM 或 SOCK_DGRAM。 Backlog:表示接入隊列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許 20 個,也可以子定義 5~ 10 個。 參數(shù)作用: Sockfd:表示 socket 的文件描述符。 (8) 有關(guān)線程的系統(tǒng)調(diào)用函數(shù) pthread_create()、 pthread_join() 實(shí)驗(yàn)過程說明(使用 TCP/IP) (1) 監(jiān)聽連接 利用 socket、 bind、 listen 建立連接,步驟是: 1) 先用 socket 函數(shù)初始化 socket,創(chuàng)建新的 sockfd。my_addr,sizeof(stuct sockaddr))。 void recmessage(void){ while(1){ int numbytes。 close(sockfd)。sin_size)) == 1){ perror(accept)。 exit(1)。 exit(1)。 if(send(new_fd,msg,strlen(msg),0) == 1){ perror(send)。 } (2) 客戶端源程序清單如下,設(shè)文件名為 include include include include include includesys/ includei/ includesys/ include define PORT 3490 define MAXDATASIZE 1024 int sockfd。 《 基于 Linux網(wǎng)絡(luò)聊天室的設(shè)計 》 第 17 頁 共 21 頁 if(strcmp(buf,exit) == 0){ printf(Server is closed\n)。 } if((he=gethostbyname(argv[1])) == NULL){ herror(gethostbyname)。(),8)。 scanf(%s,msg)。 }