版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、 引言(簡要說明設(shè)計題目的目的、意義、內(nèi)容、主要任務(wù)等)1.1設(shè)計目的本次系統(tǒng)軟件課程設(shè)計的主要目的有兩個:一方面是分析設(shè)計linux源代碼,另一方面是進(jìn)行系統(tǒng)級的程序設(shè)計。1.2 題目與要求我計劃編寫的題目是:小學(xué)算術(shù)運(yùn)算測試程序。制作一個可供小學(xué)數(shù)學(xué)運(yùn)算的程序:10以內(nèi)加減法,能根據(jù)輸入題數(shù)出題,判斷題是否正確,最后計算分?jǐn)?shù)。并用make工程管理器編譯,編寫makefile文件。簡單聊天程序。在linux下用c語言編寫一個簡單的網(wǎng)絡(luò)聊天程序。實(shí)現(xiàn)網(wǎng)絡(luò)傳輸功能。1.3內(nèi)容及主要任務(wù)小學(xué)算術(shù)運(yùn)算測試程序:要求完成 10 以內(nèi)的加減運(yùn)算。 能根據(jù)用戶 輸入的想要練習(xí)的題目數(shù)自行出題。用戶輸入
2、答案后可以判斷正誤,并能給出算對及算錯的題目數(shù),最后計算出分?jǐn)?shù)。同時,對于用戶算錯的題目會發(fā)出報警聲,提示用戶注意,同時給出正確結(jié)果。做完一次測試后用戶可決定是否繼續(xù)進(jìn)行下一次測試。簡單聊天程序:本課題是建立聊天通信模型,設(shè)計一個聊天室軟件, 包括服務(wù)器端和客戶端, 主要功能為:、 服務(wù)器端功能:初始化 socket創(chuàng)建服務(wù)器端。維護(hù)一個鏈表,保存所有用戶的 ip 地址、端口信息。接受用戶傳送來的聊天信息,然后向鏈表中的所用用戶轉(zhuǎn)發(fā)。接受用戶傳送來的連接判斷命令,并向用戶發(fā)出響應(yīng)命令。、 客戶端功能: 客戶端界面上的兩個文本框,一個用于顯示接受的聊天信息,一個用來接受用戶輸入的聊天信息。當(dāng)按下
3、“發(fā)送”按鈕時將信息發(fā)送給服務(wù)器。1.4題目設(shè)計意義通過本課題的畢業(yè)設(shè)計,熟悉了關(guān)于linux下c語言的系統(tǒng)軟件程序設(shè)計,可以比較深入的了解和掌握 winsock 控件基本屬性、方法和事件,理解 網(wǎng)絡(luò)聊天通信的概念,輸控制協(xié)議(tcp)進(jìn)行數(shù)據(jù)交流,初步掌握網(wǎng)絡(luò)聊天通信程序的設(shè)計方法。 并能鞏固和擴(kuò)展大學(xué)期間的學(xué)習(xí)內(nèi)容,進(jìn)行項目的設(shè)計開發(fā)訓(xùn)練,更好的適應(yīng)社會的需求。隨著計算機(jī)網(wǎng)絡(luò)技術(shù)的快速發(fā)展,人們的交流方式越來越多,傳統(tǒng)的通信方式在速度和可靠性方面已經(jīng)很難滿足人們的需要,即時通信系統(tǒng)已成為人們的新寵。同時,即時通信系統(tǒng)對現(xiàn)代企業(yè)也有著重大意義,它為諸企業(yè)開拓了網(wǎng)絡(luò)應(yīng)用的新領(lǐng)域。自從它誕生以來
4、,以實(shí)時交互、資費(fèi)低廉等優(yōu)點(diǎn),受到廣大個人用戶的喜愛,已經(jīng)成為網(wǎng)絡(luò)生活中不可或缺的一部分。本著學(xué)以致用的原則,本人開發(fā)了這套多點(diǎn)聊天系統(tǒng),以滿足網(wǎng)絡(luò)用戶的通訊需求。該系統(tǒng)具有操作簡單、界面友好、功能專一等特點(diǎn)。本報告就系統(tǒng)的開發(fā)過程做了詳細(xì)的介紹,并對系統(tǒng)的原理、總體設(shè)計等方面做了深入細(xì)致的討論。二、 正文(課程設(shè)計的主要內(nèi)容,包括實(shí)驗(yàn)與觀測方法和結(jié)果、儀器設(shè)備、計算方法、編程原理、數(shù)據(jù)處理、設(shè)計說明與依據(jù)、加工整理和圖表、形成的論點(diǎn)和導(dǎo)出的結(jié)論等。正文內(nèi)容必須實(shí)事求是、客觀真切、準(zhǔn)確完備、合乎邏輯、層次分明、語言流暢、結(jié)構(gòu)嚴(yán)謹(jǐn),符合各學(xué)科、專業(yè)的有關(guān)要求。)任務(wù)一:小學(xué)數(shù)學(xué)運(yùn)算程序2.1.1
5、主要內(nèi)容 本程序共分為五個模塊:出題模塊、答題模塊、檢查計分模塊、評分模塊和評價模塊;下面分別對這五個模塊的算法做一下介紹。出題模塊:一個答題系統(tǒng)自然而然首先就是要有題目且能夠根據(jù)條件出題;在本模塊中,首先設(shè)了一個含有15個指針的指針數(shù)組,指針數(shù)組里的每個指針都指向了相應(yīng)題號的選擇題,這樣就實(shí)現(xiàn)了對題目的儲存;然后用 scanf 函數(shù)來實(shí)現(xiàn)從鍵盤上輸入題號,用 if 語句控制輸題的范圍;題號不在 1-15 的范圍內(nèi)就提示選題出錯;在輸入題號的過程中輸入相同題號是在所難免的;但 是在答題系統(tǒng)中輸入相同題號顯然沒有意義,所以另外設(shè)了一個靜態(tài)一維數(shù)組來儲存已輸過的題號;且數(shù)組的第一個元素初始化為 0
6、,然后每輸入一個題號就賦給這個數(shù)組,同時用 for 語句來使當(dāng)前的題號一一與儲存在一維數(shù)組中已輸過的題號進(jìn)行比較,如題號有相同,就提示重答,重答的功能是通過對出題模塊函數(shù)的遞歸調(diào)用來實(shí)現(xiàn)的,如題號沒有相同,就通過輸入的題號借助指針數(shù)組里的指針找到與題號對應(yīng)的選擇題,用 puts 函數(shù)來實(shí)現(xiàn)對選擇題的輸出;最后用 return 語句將其他模塊返回來每道題的小分?jǐn)?shù)返回到主函數(shù)中(在主函 數(shù)中調(diào)用出題模塊函數(shù))。答題模塊:出完題后自然是從鍵盤上輸入答案了,在本模塊中,提示輸入答案后,用 scanf 函數(shù)來實(shí)現(xiàn)使從鍵盤上輸入的一個答案選項(a、b、c、d) 賦給一個用來記錄答案的字符變量;用 retu
7、rn 語句將這個變量返回到出題模塊中。檢查計分模塊:輸入答案選項后,就要判斷答案的正確性和計分了,在本模塊中,要設(shè)一個字符數(shù)組來儲存每道題的正確答案;用 if 語句來控制在答題模塊中輸入的答案是否為 a、b、c、d 中的某一個;若不是,就提示選的答案不在答案范圍內(nèi),若是,根據(jù)在出題模塊中輸?shù)念}號使在答題模塊中輸入的答案選項與儲存正確答案數(shù)組中的相應(yīng)答案選項相比較,若相同,就提示答案正確,與此同時用變量記錄下這道題所得的小分,否則,就提示答案錯誤并給出當(dāng)前題目的正確答案,不計分;用 return 語句將得分返回到出題系統(tǒng)中(在出題 模塊函數(shù)中調(diào)用檢查計分模塊函數(shù))。評分模塊:做完題后,就要根據(jù)做
8、題的對錯個數(shù)來評分;在本模塊中,首先就要提示題目全做完,用switch語句根據(jù)總小分來選擇性地選出11個不同的分?jǐn)?shù)中的一個分?jǐn)?shù),并且打印出該分?jǐn)?shù) (在主函數(shù)中調(diào)用評分模塊函數(shù)) 。評價模塊:最后一步就是要根據(jù)不同的總得分段來給出不同的評語,在本模塊中用 if 語句根據(jù)不同的總分?jǐn)?shù)段來打印出不同的評語(在主函數(shù)中調(diào) 用評價模塊函數(shù)) 。主函數(shù)將這五個模塊直接地或間接地聯(lián)系在一起,使它們構(gòu)成本程序,現(xiàn)在就來介紹主函數(shù)的算法。主函數(shù)對出題模塊函數(shù)、評價模塊函數(shù)進(jìn)行了調(diào)用;首先提示開始答題,為了要答 10 次題,就要設(shè)一個 for 語句來控制對出題模塊函數(shù)調(diào)用的次數(shù),即需要答一定次數(shù)的題,與此同時用一
9、個變量來累加由出題模塊函數(shù)返回來每道題的小分?jǐn)?shù);接下來分別對評分模塊函數(shù)和評價模塊函數(shù)進(jìn)行調(diào)用。以上就是對本程序算法的介紹。2.1.2 程序結(jié)構(gòu)及主要過程本程序共包含了順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種在 c 程序中的主要結(jié)構(gòu),其中穿插了數(shù)組(一維數(shù)組、字符數(shù)組)、指針 (指針數(shù)組)、函數(shù)調(diào)用(遞歸調(diào)用)等知識,該程序覆蓋了本學(xué)期所學(xué)的除結(jié)構(gòu)體外的大部分知識。本程序結(jié)構(gòu)和過程思路如下:為了要答題,首先要有題目,設(shè)一個指針數(shù)組來實(shí)現(xiàn);把相應(yīng)的題目調(diào)出,應(yīng)用指針的功能實(shí)現(xiàn);調(diào)出題目后,就要給用戶答題了,用一個輸入函數(shù)實(shí)現(xiàn);再經(jīng)過系統(tǒng)的判斷,用一個字符數(shù)組儲存正確答案結(jié)合判斷語句實(shí)現(xiàn);最后累加計分,用
10、循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。總之,該程序的總體結(jié)構(gòu)和過程很好的體現(xiàn)了現(xiàn)在所提倡的對一個程序結(jié)構(gòu)模塊化的思想。2.1.3 程序模塊功能說明 本程序一共有五個模塊,它們分別是:出題模塊(question_out(),答題 模塊(answer(),檢查計分模塊(check(),評分模塊(count(),評價模塊 (assessment(),現(xiàn)在就來分別介紹這五個模塊的功能。出題模塊(question_out():這一模塊主要負(fù)責(zé)對題目的儲存和調(diào)出這兩個功能。答題模塊(answer():這一模塊主要負(fù)責(zé)將用戶端的答案通過鍵盤輸入到系統(tǒng)。檢查計分模塊(check():這一模塊主要負(fù)責(zé)檢查判斷用戶所提供的答案是否正確并
11、根據(jù)它來記錄每題所的總分。評分模塊(count():這一模塊主要負(fù)責(zé)統(tǒng)計總得分并打印。評價模塊(assessment() :這一模塊主要負(fù)責(zé)根據(jù)給出的總得分打印相應(yīng)的評語??傊@五個模塊都有著各自的功能且互相聯(lián)系,五者在程序中缺一不可。2.1.4 makefile介紹makefile文件介紹makefile一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因?yàn)?makefile就像一個shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。makefi
12、le主要功能make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關(guān)系并自動維護(hù)編譯工作。而makefile 文件需要按照某種語法進(jìn)行編寫,文件中需要說明如何編譯各個源文件并連接生成可執(zhí)行文件,并要求定義源文件之間的依賴關(guān)系。makefile 文件是許多編譯器-包括 windows nt 下的編譯器-維護(hù)編譯信息的常用方法,只是在集成開發(fā)環(huán)境中,用戶通過友好的界面修改 makefile 文件而已。自動化編譯makefile帶來的好處就是“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發(fā)的效率。make是一個命令工具,是一個
13、解釋makefile中指令的命令工具,一般來說,大多數(shù)的ide都有這個命令,比如:delphi的make,visual c+的nmake,linux下gnu的make??梢?,makefile都成為了一種在工程方面的編譯方法。2.1.5 makefile規(guī)則makefile中的規(guī)則是這樣的:target : dependencies command目標(biāo)(target)程序產(chǎn)生的文件,如可執(zhí)行文件和目標(biāo)文件;目標(biāo)也可以是要執(zhí)行的動作,如“clean”。依賴(dependencies)是用來產(chǎn)生目標(biāo)的輸入文件,一個目標(biāo)通常依賴于多個文件。命令(command)是make執(zhí)行的動作,一個可以有多個命令
14、,每個占一行。注意:每個命令行的起始字符必須為tab字符!有依賴關(guān)系規(guī)則中的命令通常在依賴文件變化時負(fù)責(zé)產(chǎn)生target文件,make執(zhí)行這些命令更新或產(chǎn)生target。規(guī)則可以沒有依賴關(guān)系,如包含target “clean”的規(guī)則。規(guī)則解釋如何和何時重做該規(guī)則中的文件,make根據(jù)依賴關(guān)系執(zhí)行產(chǎn)生或更新目標(biāo);規(guī)則也說明如何和何時執(zhí)行動作。有的規(guī)則看起來很復(fù)雜,但都符合上述模式。makefile中的規(guī)則描述如何生成特定的文件,即規(guī)則的目標(biāo)。規(guī)則列出了目標(biāo)的依賴文件,指定生成或更新目標(biāo)的命令。規(guī)則的次序是不重要的,除非是確定缺省目標(biāo):缺省目標(biāo)是第一個makefile中的第一個規(guī)則;如果第一個規(guī)則
15、有多個目標(biāo),第一個目標(biāo)是缺省的。有兩個例外:以.開頭的目標(biāo)不是缺省目標(biāo);模式規(guī)則對缺省目標(biāo)沒有影響。通常我們所寫的地一個規(guī)則是編譯整個或makefile中指定的所有程序。2.1.6 makefile文件 main:main.o input.o chuti.ogcc main.o input.o chuti.o -o mainmain.o:main.c myhead.hgcc -c main.cinput.o:main.cgcc -c input.cchuti.o:main.cgcc -c chuti.c2.1.7 源程序#include #include void function( )int
16、 index,itest_total,n=200;int iflag,num1,num2,itotal,iarrsum200,iarranswer200,iarrop4;itotal=0;printf(請輸入題數(shù):n);scanf(%d,&itest_total);for(index=0;indexitest_total;index+)iflag=rand()%4+1;switch(iflag)case 1:num1=rand()%10;num2=rand()%10;iarrsumindex=num1+num2;printf(%d+%d=n,num1,num2);break;case 2:nu
17、m1=rand()%10;num2=rand()%10;iarrsumindex=num1-num2;printf(%d-%d=n,num1,num2);break;case 3:num1=rand()%10;num2=rand()%10;iarrsumindex=num1*num2;printf(%d*%d=n,num1,num2);break;case 4:num1=rand()%10;num2=rand()%10;iarrsumindex=num1/num2;printf(%d/%d=n,num1,num2);break;default:break;printf(依次輸入每題的答案:n)
18、;for(index=0;indexitest_total;index+)scanf(%d,&iarranswerindex);getchar();if(iarranswerindex=iarrsumindex)itotal+;printf(正確率:%f%n,100.0*(itotal*1.0)/itest_total);int main()char flag; /開始有一輪測試,以后根據(jù)用戶的輸入開始新一輪測試或結(jié)束測試; dofunction();printf(請輸入y表示開始新一輪測試,其他字母表示結(jié)束測試:n);scanf(%c,&flag);while(flag!= y); retu
19、rn 0; 2.1.8 試驗(yàn)過程及結(jié)果輸入題數(shù)5得到計算式輸入每題答案運(yùn)行結(jié)果輸入y重新開始,輸入其他字母結(jié)束。2.1.6結(jié)果分析這是一個小學(xué)數(shù)學(xué)運(yùn)算測試程序,要求完成 10 以內(nèi)的加減運(yùn)算。 能根據(jù)用戶 輸入的想要練習(xí)的題目數(shù)自行出題。用戶輸入答案后可以判斷正誤,并能給出算對及算錯的題目數(shù),最后計算出分?jǐn)?shù)。同時,對于用戶算錯的題目會發(fā)出報警聲,提示用戶注意,同時給出正確結(jié)果。做完一次測試后用戶可決定是否繼續(xù)進(jìn)行下一次 測試。該程序基本實(shí)現(xiàn)了以上功能,且計算結(jié)果合理正確,滿足實(shí)驗(yàn)要求。任務(wù)二:linux下c語言設(shè)計簡單聊天程序2.2.1實(shí)驗(yàn)題目熟悉linux操作系統(tǒng)下最簡單實(shí)用的通信程序soc
20、ket.最好能全部完成,否則按照完成情況打分。2.2.2實(shí)驗(yàn)?zāi)康耐ㄟ^對socket的編寫,可以了解linux下最簡單實(shí)用的進(jìn)程通信方法,為后續(xù)信號燈、消息隊列等學(xué)習(xí)奠定基礎(chǔ)。2.2.3實(shí)驗(yàn)設(shè)備及環(huán)境硬件設(shè)備:pc機(jī)一臺軟件環(huán)境:安裝linux操作系統(tǒng),并安裝相關(guān)的程序開發(fā)環(huán)境,如c c+tshbsh等編程語言環(huán)境。2.2.4實(shí)驗(yàn)內(nèi)容及要求內(nèi)容:本課題是建立聊天通信模型:設(shè)計一個聊天室軟件。包括服務(wù)器端和客戶端。 主要功能為:、服務(wù)器端功能:初始化 socket, 創(chuàng)建服務(wù)器端。維護(hù)一個鏈表,保存所有用戶的 ip 地址、端口信息。接受用戶傳送來的聊天信息,然后向鏈表中的所用用戶轉(zhuǎn)發(fā)。接受用戶傳送
21、來的連接判斷命令,并向用戶發(fā)出響應(yīng)命令。、客戶端功能: 客戶端界面上的兩個文本框,一個用于顯示接受的聊天信息,一個用來接受用戶輸入的聊天信息。當(dāng)按下“發(fā)送”按鈕時將信息發(fā)送給服務(wù)器。要求:用c語言編程實(shí)現(xiàn)linux簡單的聊天室功能。用戶程序命名為client.c;服務(wù)器程序命名為server.c。綁定端口等信息見實(shí)驗(yàn)方法內(nèi)容,要求client可以通過socket連接server。在client,提示輸入服務(wù)器ip。若連接server 的socket建立成功,返回提示信息。client輸入的聊天內(nèi)容在client端(多個client端)和server端同時顯示。多個client可同時接入serv
22、er,進(jìn)入聊天室,最多支持20個client。client端輸入quit退出連接,server端提示client退出??蛇x擇使用多線程實(shí)現(xiàn)多客戶端。2.2.5實(shí)驗(yàn)方法內(nèi)容主要的常量變量客戶端:#define true 1#define port 5000int quit=0; /quit表示是否用戶確定退出服務(wù)器端:#define maxline 1000 /在一條消息中最大的輸出字符數(shù)#define listenq 20 /最大監(jiān)聽隊列#define port 5000 /監(jiān)聽端口#define maxfd 20 /最大的在線用戶數(shù)量void *get_client(void *); int
23、 i,maxi=-1;/maxi表示當(dāng)前client數(shù)組中最大的用戶的i值int clientmaxfd;主要模塊客戶端:int main(void)void *get_server(void* sockfd) /get_server函數(shù),用于接受服務(wù)器轉(zhuǎn)發(fā)的消息服務(wù)器端:int main() void *get_client(void *sockfd) /運(yùn)行g(shù)et_client函數(shù),處理用戶請求2.2.6代碼客戶端代碼#ifdef have_config_h#include #endif#include client.hint main(int argc, char *argv) int
24、cstcp,csudp,ccudp; int server_port=8000;/c-s tcp port int cc_port=5000;/c-c udp port struct hostent *hostptr = null; struct sockaddr_in cs_link = 0 ; struct sockaddr_in cc_link = 0 ; char hostname80 = ; char bufbufsize+1=; char *msg; char *s_addr = null; int recvn; int childpid; if (2 != argc) fprin
25、tf(stderr, usage: %s n, argv0); exit(1); s_addr = argv1; cstcp = tcpsocket(); gethostname(hostname, sizeof(hostname);/get local host createsockaddr(s_addr,&cs_link,server_port);/c-s connect(cstcp,(struct sockaddr*) &cs_link); msg=client opc 0.0.1n; send(cstcp,msg); recv(cstcp,buf); printf(%s,buf); p
26、rintf(connect to server successfully,please input your nicknamen); fgets(buf); send(cstcp,buf);/send user name bzero(buf,bufsize); recv(cstcp,buf); while(strncmp(buf,:x,2)=0) printf(%s,the name has been used,please change your name:n); fgets(buf); send(cstcp,buf);/send user name bzero(buf,bufsize);
27、recv(cstcp,buf); printf(%s,buf); send(cstcp,:l);/send com to get userlist form server printf(online users:n); bzero(buf,bufsize); recv(cstcp,buf);/get userlist from server printf(%s,buf); childpid = fork(); switch (childpid) case -1: / error perror(fork(); exit(1); case 0: / child process while(1) b
28、zero(buf,bufsize); if(recv(cstcp,buf)0) if(strncmp(buf,:q,2)=0) exit(0);/get userlist from server printf(%s,buf);服務(wù)器端代碼#include int tcpsocket() int n; if ( (n = socket(pf_inet,sock_stream,0)=-1) perror(tcp socket error); exit(1); return(n);void setsockopt(int s) int on = 1; struct linger linger = 0
29、; linger.l_onoff = 1; linger.l_linger = 30; if ( setsockopt(s, sol_socket, so_reuseaddr, (const char *) &on, sizeof(on)=-1) perror(setsockopt(.,so_reuseaddr,.); exit(1); if ( setsockopt(s, sol_socket, so_linger, (const char *) &linger, sizeof(linger)=-1) perror(setsockopt(.,so_linger,.); exit(1); in
30、t bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) return bind(sockfd,my_addr,addrlen);void listen(int s)void gethostname(char *buffer, int length) struct utsname sysname = 0 ; int status = 0; status = uname(&sysname); if (-1 != status) strncpy(buffer, sysname.nodename, length); e
31、lse perror(gethostname(); exit(1); void createsockaddr(const char *hostname,struct sockaddr_in *sockaddress,int port) struct hostent *host = null; host = gethostbyname(hostname); if (null = host) host = gethostbyaddr(hostname, strlen(hostname), af_inet); (void) memset(sockaddress, 0, sizeof(sockaddr
32、ess); (void) memcpy(&(*sockaddress).sin_addr), host-h_addr, host-h_length); sockaddress-sin_addr.s_addr=htonl(inaddr_any); sockaddress-sin_family = af_inet; sockaddress-sin_port = htons(port);ssize_t send(int s, const void *buf) ssize_t sendn; if( -1=(sendn=send(s, buf, strlen(buf), 0) perror(send()
33、; close(s); return sendn;ssize_t recv(int s, void *buf)char *fgets(char *s) bzero(s,bufsize);void rtrim(char *buf) int i; for(i=0;i255;i+) if(bufi=n) bufi=0; break; 2.2.7實(shí)驗(yàn)過程服務(wù)器打開l客戶端打開,并輸入了地址,昵稱l 服務(wù)器端顯示l客戶端2進(jìn)入l服務(wù)器顯示l張三輸入l李四端顯示l服務(wù)器顯示l李四輸入l張三顯示服務(wù)器顯示2.2.8結(jié)果分析這是一個聊天室程序,可以實(shí)現(xiàn)群聊的功能,即當(dāng)某個客戶發(fā)出消息后,服務(wù)器和其他個客戶端都
34、能收到此消息。且能夠顯示客戶端的用戶名。但客戶端退出聊天室后,服務(wù)器和其他在線客戶端會有提示。實(shí)現(xiàn)群聊的機(jī)制是:當(dāng)某個客戶端需要發(fā)送消息是,它將此消息發(fā)送給服務(wù)器,服務(wù)器再將此消息轉(zhuǎn)發(fā)給各客戶端,各客戶端之間是無連接的,即相互之間不能直接通信。因此,在服務(wù)器中,有兩個線程,主線程用來監(jiān)聽是否有客戶端登錄服務(wù)器,若有,建立與其連接的套接字,并存入在線客戶序列里,輔助線程是接收轉(zhuǎn)發(fā)線程,其依次讀取個客戶端,看是否有消息送達(dá),若有取出,并轉(zhuǎn)發(fā)給各其他客戶端。在客戶端也有兩個線程,主線程用來向服務(wù)器發(fā)送消息,輔助線程用來接收服務(wù)器發(fā)出的消息。存在的問題是:當(dāng)有用戶下線是,雖會在服務(wù)器和各客戶端提示用戶下線,但是并未刪除其在服務(wù)器中的套接字,致使后來用戶不能進(jìn)入。服務(wù)器的輔助線程對各客戶端采取輪流監(jiān)聽的策略,但是因?yàn)槭褂胷ead(
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年特種功能焊接材料合作協(xié)議書
- 2025年P(guān)P改性新材料合作協(xié)議書
- 2025年玻璃纖維仿形織物合作協(xié)議書
- 2025年水質(zhì)監(jiān)測系統(tǒng)合作協(xié)議書
- 八年級英語下冊 Unit 3 單元綜合測試卷(人教版 2025年春)
- 2024-2025學(xué)年河北省石家莊市高新區(qū)四年級(上)期末數(shù)學(xué)試卷
- 三年級作文詩歌:乒乓球賽
- 2025年個體工商戶雇傭合同(2篇)
- 2025年人才培訓(xùn)勞動合同樣本(2篇)
- 2025年中學(xué)高三年級下學(xué)期班級工作總結(jié)(三篇)
- 2024年長沙航空職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整
- 腫瘤微環(huán)境在癌癥進(jìn)展中的作用研究
- 上海市發(fā)展改革研究院工作人員招考聘用12人公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 2024年上海市各區(qū)高三語文二模試卷【文言文閱讀題】匯集練附答案解析
- 家禽消化系統(tǒng)認(rèn)知
- 元宇宙技術(shù)與應(yīng)用智慧樹知到期末考試答案章節(jié)答案2024年中國科學(xué)技術(shù)大學(xué)
- 攪拌設(shè)備行業(yè)發(fā)展趨勢分析報告
- 中醫(yī)院縣域緊密型醫(yī)共體雙向轉(zhuǎn)診管理制度
- 鍋爐安裝質(zhì)量手冊
- 建筑工程質(zhì)量、安全與進(jìn)度管控
- 復(fù)工復(fù)產(chǎn)安全培訓(xùn)考試題
評論
0/150
提交評論