設(shè)計聊天室試驗報告_第1頁
設(shè)計聊天室試驗報告_第2頁
設(shè)計聊天室試驗報告_第3頁
設(shè)計聊天室試驗報告_第4頁
設(shè)計聊天室試驗報告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、設(shè)計性實驗項目簡介實驗課程名稱TCP/IP協(xié)議分析實驗項目名稱聊天室實驗項目性質(zhì)1、綜合性2、設(shè)計性 V主講教師開課年級開課專業(yè)實驗地點開課日期開課時間實驗項目簡介:實驗?zāi)康模?) 通過編寫聊天室的功能理解 socket模型下客戶端和服務(wù)器的編寫(2)通過自己增加私聊的功能練習(xí)網(wǎng)絡(luò)編程的方式(3)掌握Linux平臺網(wǎng)絡(luò)數(shù)據(jù)的傳送方法。實驗內(nèi)容(1)編寫聊天室的客戶端和服務(wù)器端,客戶端主要功能是發(fā)送信息,服務(wù)器端的主要功能是將客戶 端發(fā)的內(nèi)容轉(zhuǎn)發(fā)到除發(fā)送端以外的所有客戶端,實現(xiàn)客戶端和客戶端的通信。(2 )編寫基于原始套接字的網(wǎng)絡(luò)通信原型系統(tǒng);實驗條件學(xué)院提供網(wǎng)絡(luò)實驗室,1臺/學(xué)生微型計算機,安

2、裝有 Linux虛擬機。實驗原理實驗中,客戶應(yīng)用程序向服務(wù)器程序請求服務(wù)。服務(wù)進程一直處于休眠狀態(tài),直到一個客戶 向這個服務(wù)的地址提出了連接請求。在這個時刻,服務(wù)程序被驚醒并且為客戶提供服務(wù)-對客戶的請求作出適當(dāng)?shù)姆磻?yīng)。服務(wù)器部分:1. 首先判斷客戶端的用戶是不是第一個登陸,對于第一次登陸的用戶后面加上“/”,首先判斷user link 是否為有位置,有的話并把username與入,usercount設(shè)置為1,并轉(zhuǎn)發(fā)出xxjoin the room。2. 對于登陸過的用戶可惜相互通訊,客戶端寫入信息發(fā)給服務(wù)器端,服務(wù)器端轉(zhuǎn)發(fā)出去。3. 對于輸出用戶功能,客戶端輸入“ list ”,服務(wù)器通過比

3、較給客戶端傳輸全部的用戶。4. 對于私聊功能,通過“*”符號進行判斷,利用指針取出“ *”之后的名字,只對該名字進 行轉(zhuǎn)發(fā)。服務(wù)器端代碼#in elude #i nclude #in elude #in elude #in elude #i nclude int ini t_ser( in t);void set_ name(char *li ne, char *n ame)strcpy( n ame, &li ne1);spri ntf( line, %s join the room n, n ame);void add_ name(char *li ne, char *n ame)char

4、 thel in eMAX_LINE;strcpy( theli ne, n ame);strcat( theli ne,:);strcat( theli ne, li ne);strcpy( line, theli ne);int user_free( int user_linkMAX_CLIENT)int i = 0;while ( ( user_li nki != 0)&( i0) lin ele ngth = 0;if ( (li ne0 = /) &(usernameiO = 0)set_ name( line, user namei);for ( j=0; jMAX_CLIENT;

5、j+)if ( (j != i)&(user_li nkj=1)write( userfdj, li ne, strle n( lin e);else if(li neO=T&lin e1=i&li ne2=s&li ne3=t)bzero(li ne,MAX_LINE);for(k=0;kMAX_CLIENT;k+)if(user_li nkk=1)strcat(l in e,user namek);strcat(line,);n);fflush( stdout);return( 0);bzero( ( char* )& serv_addr, sizeof( serv_addr);=AF_I

6、NET;=ht on 1( INADDR_ANY);=hto ns( SERV_TCP_PORT);if ( bind( sockfd, ( struct sockaddr *)& serv_addr,sizeof( serv_addr)0) perror( bi nd:);prin tf( server: cant bind local addressn);fflush( stdout);return( 0);return( sockfd); 客戶端部分:1. 手動輸入服務(wù)器端IP地址和端口號進行連接2. 發(fā)送消息給服務(wù)器端并顯示服務(wù)器端回傳的消息3. 監(jiān)控連接狀態(tài),客戶離開或故障時從列表中

7、刪除相應(yīng)表項,并及時更新連接表 客戶端代碼:#in elude #in clude#in clude#in elude #in elude #in elude #in elude #in elude #defi ne MAX_LINE 500#defi ne MAX_NAME 100int ini t_cli();#ifndef _SELECT_intmai n( void)int soekfd;int status;char strMAX_LINE;char n ameMAX_NAME;soekfd = ini t_eli();if ( soekfd = 0) prin tf( I nit

8、elie nt socket error. n);fflush( stdout);exit( 1);fentl( soekfd, F_SETFL, O_NONBLOCK);fprintf( stdout, Please in put your n ame:);fscanf( stdi n, %s, n ame);strepy( str, /);streat( str, n ame);write( soekfd, str, strle n( str);fentl( 0, F_SETFL, O_NONBLOCK);while ( 1) if ( (status = read( soekfd, st

9、r, MAX_LINE)=0 ) if ( status = 0) exit(0);strstatus = 0: prin tf( %s, str); fflush( stdout);if ( (status = read( 0, str, MAX_LINE)0)strstatus = 0;if ( str0 = q)spri ntf( str, I leave the room.n);write( sockfd, str, strle n( str);close( sockfd);exit( 0);write( sockfd, str, strle n( str);return 1;#end

10、if n);fflush( stdout);return( 0);if ( conn ect( sockfd, ( struct sockaddr *)&serv_addr, sizeof( serv_addr)0) prin tf( clie nt:ca nt conn ect to server n);fflush( stdout);return( 0);retur n( sockfd);運行結(jié)果:服務(wù)器端運行結(jié)果,顯示端口號并處于等待連接狀態(tài):1廠rootloc a Iho st *)TCP1 F3/設(shè) tl 性實驗-耳II文件綢輯査看終端標(biāo)簽i.rayt*lociLhu&l .root

11、ol:cal has I Iroot&lncalhnst roatlccalhost 33331=? cd /raot/TCPrr/iS計性實臉 i殳計性實驗1年vim server.ci殳計性實騎擰 gcc -o server server ,c 設(shè)計性./server群聊功能,四個客戶端代表四個用戶,通過服務(wù)器的轉(zhuǎn)發(fā)實現(xiàn)通信。rootIocalhostiTCPlP/Ttfife 3raot$ localhost/TCPI P/謖卄性宴鱉弊Q 鋰 ifM 騎標(biāo)希恤文件忖編輯査看熾ISS” roDUluAlhoAt t cd /rMt/rCPIP/Tr性實驗| rootfilocalbo&t

12、誼ft性實卸# via client.c.rJDtlDCEltlOS 說牝?qū)崉?譏R otilocel bos 誼計桂實蚩 j# gcc -q dlient d ieclt.c roctvlocalbos: iilIKvi .= ./zlientPlease Upul pur nan)e:fzj;li joithe roor11 對 join the roam s 1 where is yy gh : i dont knov/t join Lte rn-TDrMtloealbcst 設(shè)計性實驗#Id詢EeasL input, cilirFzl jDt n the rooii fzl

13、 : hello &g join the rcom sg : tiere is yy :Jon L knett yy Join the ream 、y ; i 右m coming a -nJ3roatlocaihostrrCPIP.ttttSHroots lctcalhQSt:-/TCPI F7 誥廿性宴翱支件編愷 輻防線端棕簽幫肋文件黑齡施吩艄砂rooWlmlhot Sttft 更雜 1 帶./cLientFlense Input your iHne;跑 fi join the roon gh Join the roon f7l : hellowhere ts jry?gh ! i dun

14、t ko04yy join tbe rconxv : iconi nPrjoLMocftlhist 設(shè)計性實驗# ./client Fkite input j-cur nam:n fzl jo; n the roongh M:n the msfzl i 11*1 lojoi fi l he roanwg - “衣比iY?Eh : i dont knowi am “m 腥顯示所有的用戶功能,通過發(fā)送“l(fā)ist ”由客戶端發(fā)送所有的用戶名字。arootlocalhost:/TCPlP/謖計性實鯊回區(qū)1文件漏輯查看 繆端 標(biāo)簽 幫助妙raotl oalhos.t TOOttbl DB1 hzi&t

15、rootiijl ocel his t .ron qbI heist rootl oca! h isl Please gh jdi n hcl lo sg Join the room sg inhere is 計? gh : i d-an1 七 know yy . joi n ihc room yy : i dm cotning“用 cd /root/rCPIP/15 計性真驗 設(shè)計性實鮭產(chǎn) 設(shè)計性實嵯擰 諾計性實髓卩 設(shè)計性實卷沖vi曲 client.ivi m c1i ent、cgcc f client clicnt.c ./c I i entinput your name!fz1t he rco inliiLfz【gh s百 jy

溫馨提示

  • 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

提交評論