基于TCP的多線程聊天室實(shí)現(xiàn)

基于TCP的多線程聊天室實(shí)現(xiàn)

ID:39474364

大小:498.00 KB

頁數(shù):8頁

時(shí)間:2019-07-04

基于TCP的多線程聊天室實(shí)現(xiàn)_第1頁
基于TCP的多線程聊天室實(shí)現(xiàn)_第2頁
基于TCP的多線程聊天室實(shí)現(xiàn)_第3頁
基于TCP的多線程聊天室實(shí)現(xiàn)_第4頁
基于TCP的多線程聊天室實(shí)現(xiàn)_第5頁
資源描述:

《基于TCP的多線程聊天室實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、基于TCP的多線程聊天室實(shí)現(xiàn)Linux網(wǎng)絡(luò)應(yīng)用技術(shù)基于TCP的多線程聊天室設(shè)計(jì)姓名:李元池,宋權(quán)學(xué)號(hào):班級(jí):14軟工云計(jì)算4班頁8基于TCP的多線程聊天室實(shí)現(xiàn)一:設(shè)計(jì)思想:創(chuàng)建通信套接字,進(jìn)行對(duì)于客戶端的監(jiān)聽,定義的有一個(gè)全局變量intuser_fd[MAX_USER];用來保存已經(jīng)連接的用戶的通信套接字;用戶選擇群聊的時(shí)候服務(wù)器會(huì)把接收到的信息發(fā)送給除了發(fā)送此消息的其他所有客戶端,用戶選擇私聊則通過服務(wù)器端定義的結(jié)構(gòu)體structuser_mess{charmessage[100];charn

2、ame[20];intk;}User[10];中的k;來判斷次編號(hào)對(duì)應(yīng)的客戶套接字,把此消息發(fā)送給指定的客戶端!利用shocket套接字進(jìn)行對(duì)于信息的傳遞,同時(shí)shocket套接字也是一種對(duì)于信息識(shí)別的判斷依據(jù),根據(jù)套接字可以找到接受的信息的意圖,并且進(jìn)行處理相應(yīng)的信息,而且服務(wù)器還可以通過對(duì)于shocket的識(shí)別,然后判斷哪個(gè)客戶發(fā)送的信息,然后進(jìn)行轉(zhuǎn)發(fā)個(gè)其他客戶端,進(jìn)而實(shí)現(xiàn)客戶與客戶之間的通信。服務(wù)器相當(dāng)于一個(gè)對(duì)于客戶端發(fā)送的信息進(jìn)行轉(zhuǎn)發(fā)的平臺(tái),當(dāng)客戶端的信息發(fā)送過來后,服務(wù)器會(huì)自動(dòng)通過套接

3、字將信息在全部轉(zhuǎn)發(fā)給其他的客戶,實(shí)現(xiàn)客戶端之間的通信二:流程圖服務(wù)器(sever.c)客戶端(client.c)客戶端發(fā)過來其它數(shù)字如1,2,3,….則服務(wù)器會(huì)根據(jù)儲(chǔ)存在user_fd[],數(shù)組的下標(biāo)找到對(duì)應(yīng)的客戶端套接字,并把私聊消息正確的發(fā)送給該客戶端!接收私聊消息請(qǐng)求客戶端發(fā)送過來-1,則把該消息發(fā)送給其他所有在線客戶端發(fā)送選項(xiàng)為-1進(jìn)入公聊連接成功后創(chuàng)建兩個(gè)線程th1,th2用于發(fā)送和接收服務(wù)器的信息客戶端在服務(wù)器監(jiān)聽的時(shí)候發(fā)送連接請(qǐng)求!acceptYN客戶連接在服務(wù)器先開啟監(jiān)聽服務(wù),等

4、待客戶端連接后再運(yùn)行客戶端代碼……命令行參數(shù):IP+端口號(hào)+昵稱開啟監(jiān)聽listen……輸出錯(cuò)誤信息連接成功后創(chuàng)建兩個(gè)線程th1,th2用于發(fā)送和接收服務(wù)器的信息連接成功后創(chuàng)建一個(gè)線程,處理該用戶發(fā)送過來的消息和選項(xiàng)發(fā)送其它數(shù)字則把消息私聊發(fā)送給該客戶端三:分工合作頁8基于TCP的多線程聊天室實(shí)現(xiàn)李元池負(fù)責(zé)服務(wù)器端的編寫,宋權(quán)負(fù)責(zé)客戶端的編寫,在寫的過程中商量好用于收發(fā)消息的結(jié)構(gòu)體保持一致。四:運(yùn)行步驟及注意事項(xiàng):在服務(wù)器開啟監(jiān)聽服務(wù)之后,啟用客戶端段進(jìn)行連接,服務(wù)器程序編譯:gcc2_seve

5、r.c–osever–lpthread運(yùn)行:./s客戶端程序編譯:gcc1_client.c–oclient–lpthread運(yùn)行:./c+服務(wù)器的IP+端口號(hào)+你的昵稱目前代碼存在的問題有:用戶昵稱重復(fù)處理;異常退出處理;五:運(yùn)行截圖開啟一個(gè)服務(wù)器和三個(gè)客戶端昵稱分別為:李元池,更淵博,許陽,1:(群聊)李元池發(fā)送一個(gè)”Hello!everybody!”的消息:2:私聊:李元池給客戶端2更淵博發(fā)送消息:頁8基于TCP的多線程聊天室實(shí)現(xiàn)3:許陽給客戶端1,李元池發(fā)送消息:(????)??嗨bob

6、y!六:個(gè)人心得總結(jié)這兩個(gè)星期的課余時(shí)間主要和宋權(quán)一起寫了Linux網(wǎng)絡(luò)編程的大作業(yè),當(dāng)然學(xué)習(xí)的時(shí)候遇到了許多問題,比如:實(shí)踐做聊天室的時(shí)候問題百出,剛開始的時(shí)候不知道怎么實(shí)現(xiàn)多個(gè)客戶端通信,而通過測(cè)試發(fā)現(xiàn)每次客戶端連接時(shí)的套接字不一樣,都是從頁8基于TCP的多線程聊天室實(shí)現(xiàn)開始隨著客戶端連接的增多而遞增的,所以我把每次連接時(shí)的套接字都存到了數(shù)組里,接著問題是客戶端連接的時(shí)候要嗎不能做到同步發(fā)送,要嗎有的客戶端收不到信息,又或者是服務(wù)器多轉(zhuǎn)發(fā)幾次,通過上網(wǎng)搜索和交流發(fā)現(xiàn)是沒有實(shí)現(xiàn)并發(fā),而實(shí)現(xiàn)并發(fā)

7、的方式有i/o多線路,多進(jìn)程和多線程,而我用的是多線程實(shí)現(xiàn)的并發(fā)的。這些問題解決后,群聊實(shí)現(xiàn)了;那么,私聊呢,該如何實(shí)現(xiàn),在客戶端建立一個(gè)結(jié)構(gòu)體用于向服務(wù)器發(fā)送和接受消息,而在服務(wù)器里面這有一個(gè)結(jié)構(gòu)體數(shù)組保存鏈接在線的客戶端消息,還有一個(gè)套接字描述符的數(shù)組用于保存客戶端的套接字,服務(wù)器在接收到客戶端發(fā)過來的消息時(shí)會(huì)判斷客戶的發(fā)送選項(xiàng),根據(jù)選項(xiàng)來找到對(duì)應(yīng)下標(biāo)的客戶端套接字并把消息發(fā)送給該客戶端。通過此次雖然學(xué)到了不少,但是自身問題缺點(diǎn)也暴露了很多,最主要的是學(xué)到了提高如何處理問題的能力,遇到問題時(shí)

8、該如何查找問題產(chǎn)生的原因,該如何解決問題,解決問題時(shí)的思路思想;自身問題就是還是自己思路比較狹窄,學(xué)東西比較慢,感覺學(xué)過之后就忘了??偟膩碚f通過這兩個(gè)星期的學(xué)習(xí)學(xué)的東西還挺多的。頁8基于TCP的多線程聊天室實(shí)現(xiàn)七:附錄客戶端代碼!//Client.cpp#include#include#include#include#include#include#incl

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。