设计聊天室试验报告_第1页
设计聊天室试验报告_第2页
设计聊天室试验报告_第3页
设计聊天室试验报告_第4页
设计聊天室试验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计性实验项目简介实验课程名称TCP/IP协议分析实验项目名称聊天室实验项目性质1、综合性2、设计性 V主讲教师开课年级开课专业实验地点开课日期开课时间实验项目简介:实验目的(1) 通过编写聊天室的功能理解 socket模型下客户端和服务器的编写(2)通过自己增加私聊的功能练习网络编程的方式(3)掌握Linux平台网络数据的传送方法。实验内容(1)编写聊天室的客户端和服务器端,客户端主要功能是发送信息,服务器端的主要功能是将客户 端发的内容转发到除发送端以外的所有客户端,实现客户端和客户端的通信。(2 )编写基于原始套接字的网络通信原型系统;实验条件学院提供网络实验室,1台/学生微型计算机,安

2、装有 Linux虚拟机。实验原理实验中,客户应用程序向服务器程序请求服务。服务进程一直处于休眠状态,直到一个客户 向这个服务的地址提出了连接请求。在这个时刻,服务程序被"惊醒"并且为客户提供服务-对客户的请求作出适当的反应。服务器部分:1. 首先判断客户端的用户是不是第一个登陆,对于第一次登陆的用户后面加上“/”,首先判断user link 是否为有位置,有的话并把username与入,usercount设置为1,并转发出xxjoin the room。2. 对于登陆过的用户可惜相互通讯,客户端写入信息发给服务器端,服务器端转发出去。3. 对于输出用户功能,客户端输入“ l

3、ist ”,服务器通过比较给客户端传输全部的用户。4. 对于私聊功能,通过“*”符号进行判断,利用指针取出“ *”之后的名字,只对该名字进 行转发。服务器端代码#in elude <> #i nclude <sys/>#in elude <n eti net/>#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

4、 ntf( line, "%s join the room' n", n ame);void add_ name(char *li ne, char *n ame)char 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

5、)&&( i<MAX_CLIENT) i+;if ( i = MAX_CLIENT) retur n( -1);return( i);intmai n( void)int sockfd;int n ew_sockfd;int user_li nkMAX_CLIENT;int userfdMAX_CLIENT;char usernameMAX_CLIENTMAX_NAME;char lin eMAX LINE;int userC ount;un sig ned intcli_le n;struct sockaddr_in cli_addr;FILE *file;int po

6、rt,i,j,k,l;int len gth;char n ameMAX_LINE;char cmpstrMAX_LINE;char lin estrMAX_LINE;char *ps,*pt,*pr;char *pl,*p n;file = fope n( "con fig", "r");fgets( line, MAX_LINE, file);fsca nf( file, "%d", & port);fclose( file);printf ( "%d n", port);sockfd = ini t_

7、ser( port);if ( sockfd = 0)prin tf( "I nit sever socket error n");fflush( stdout);user_li nki = 0;usernameiO = '0'else if ( len gth >0) lin ele ngth = '0'if ( (li ne0 = '/') &&(usernameiO = '0')set_ name( line, user namei);for ( j=0; j<MAX_CLIE

8、NT;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;k<MAX_CLIENT;k+)if(user_li nkk=1)strcat(l in e,user namek);strcat(line,""

9、);n");fflush( stdout);return( 0);bzero( ( char* )& serv_addr, sizeof( serv_addr);=AF_INET;=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: can't bind local add

10、ressn");fflush( stdout);return( 0);return( sockfd); 客户端部分:1. 手动输入服务器端IP地址和端口号进行连接2. 发送消息给服务器端并显示服务器端回传的消息3. 监控连接状态,客户离开或故障时从列表中删除相应表项,并及时更新连接表 客户端代码:#in elude <> #in clude<>#in clude<>#in elude <>#in elude <n eti net/>#in elude <>#in elude <>#in elude &

11、lt;>#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 elie nt socket error.' n");fflush( stdout);exit( 1);fentl( soekfd, F_SETFL, O_

12、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, str, MAX_LINE)>=0 ) if ( status = 0) ex

13、it(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( st

14、r);return 1;#endif n");fflush( stdout);return( 0);if ( conn ect( sockfd, ( struct sockaddr *)&serv_addr, sizeof( serv_addr)<0) prin tf( "clie nt:ca n't conn ect to server n");fflush( stdout);return( 0);retur n( sockfd);运行结果:服务器端运行结果,显示端口号并处于等待连接状态:1厂'rootloc a Iho st *)

15、TCP1 F3/设 tl 性实验-耳II文件绸辑®査看终端标签i.rayt*loc£iLhu&l .rootol:cal has I Iroot&lncalhnst roatlccalhost 33331'=? cd /raot/TCPrr/iS计性实脸 i殳计性实验1年vim server.ci殳计性实騎拧 gcc -o server server ,c 设计性./server群聊功能,四个客户端代表四个用户,通过服务器的转发实现通信。root®IocalhostiTCPlP/Ttfife 3raot$ localhost/TCPI P/

16、谡卄性宴鳖弊Q 锂 ifM 騎标希恤文件忖编辑査看熾ISS®” roDUluAlhoAt "t cd /rMt/rCPIP/®Tr性实验| rootfilocalbo&t 谊ft"性实卸# via client.c.rJDtlDCEltlOS 说牝实劉#讥R otilocel bos 谊计桂实蚩 j# gcc -q dlient d ieclt.c roctvlocalbos: 'iil'IKvi .= ./zlientPlease Upul pur nan)e:fzj;li joithe roor11 对 join

17、the roam s£ 1 where is yy° gh : i don't knov'/'t join Lte rn-TDrMtloealbcst 设计性实验#Id询EeasL input, cilirFzl jDt n the rooii fzl : hello &g join the rcom sg : tiere is yy :Jon' L knett yy Join the ream 、y ; i 右m coming a -nJ3roatlocaihostrrCPIP.ttttSHroots lctcalhQSt:-/TC

18、PI F7 诰廿性宴翱支件编愷® 輻防线端®棕签®帮肋®文件黑齡施吩艄砂rooWlmlhot Sttft 更雜 1 带./cLientFlense Input your iHne;跑 fi join the roon gh Join the roon f7l : hellowhere ts jry?gh ! i dun t ko04yy join tbe rconxv : iconi n£P'rjoLMocftlhist 设计性实验# ./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 don't knowi am “m 腥显示所有的用户功能,通过发送“list ”由客户端发送所有的用户名字。arootlocalhost:/TCPlP/谡计性实鲨回区1文件®漏辑®查看 缪端 标签 帮助妙rao

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论