欢迎来到天天文库
浏览记录
ID:57174468
大小:235.50 KB
页数:17页
时间:2020-08-05
《设计聊天室实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.设计性实验项目简介实验课程名称TCP/IP协议分析实验项目名称聊天室实验项目性质1、综合性2、设计性√主讲教师开课年级开课专业实验地点开课日期开课时间实验项目简介:实验目的(1)通过编写聊天室的功能理解socket模型下客户端和服务器的编写(2)通过自己增加私聊的功能练习网络编程的方式(3)掌握Linux平台网络数据的传送方法。实验内容(1)编写聊天室的客户端和服务器端,客户端主要功能是发送信息,服务器端的主要功能是将客户端发的内容转发到除发送端以外的所有客户端,实现客户端和客户端的通信。(2)编写基于原始套接字的网络通信原型系统;实验条件学院提供网络实验室,1台/学生微型计算机,安装有Li
2、nux虚拟机。实验原理..实验中,客户应用程序向服务器程序请求服务。服务进程一直处于休眠状态,直到一个客户向这个服务的地址提出了连接请求。在这个时刻,服务程序被"惊醒"并且为客户提供服务-对客户的请求作出适当的反应。 服务器部分:1.首先判断客户端的用户是不是第一个登陆,对于第一次登陆的用户后面加上“/”,首先判断user_link是否为有位置,有的话并把username写入,usercount设置为1,并转发出xxjointheroom。2.对于登陆过的用户可惜相互通讯,客户端写入信息发给服务器端,服务器端转发出去。3.对于输出用户功能,客户端输入“list”,服务器通过比较给客户端传输全
3、部的用户。4.对于私聊功能,通过“*”符号进行判断,利用指针取出“*”之后的名字,只对该名字进行转发。servse.c服务器端代码#include#include#include#include#include#include"chat.h"intinit_ser(int);voidset_name(char*line,char*name){strcpy(name,&line[1]);sprintf(line,"%sjointheroom",name);}voidadd_name(c
4、har*line,char*name)..{chartheline[MAX_LINE];strcpy(theline,name);strcat(theline,":");strcat(theline,line);strcpy(line,theline);}intuser_free(intuser_link[MAX_CLIENT]){inti=0;while((user_link[i]!=0)&&(i5、er_link[MAX_CLIENT];intuserfd[MAX_CLIENT];charusername[MAX_CLIENT][MAX_NAME];charline[MAX_LINE];intuserCount;..unsignedintcli_len;structsockaddr_incli_addr;FILE*file;intport,i,j,k,l;intlength;charname[MAX_LINE];charcmpstr[MAX_LINE];charlinestr[MAX_LINE];char*ps,*pt,*pr;char*pl,*pn;file=fopen("config6、","r");fgets(line,MAX_LINE,file);fscanf(file,"%d",&port);fclose(file);printf("%d",port);sockfd=init_ser(port);if(sockfd==0){printf("Initseversocketerror");fflush(stdout);//exit(1);}//Socketinitdonelisten(sockfd,MAX_CLIENT);..cli_len=sizeof(cli_addr);for(i=0;i7、ame[i][0]=' ';}userCount=0;fcntl(sockfd,F_SETFL,O_NONBLOCK);for(;;){if((userCount=user_free(user_link))>=0){new_sockfd=accept(sockfd,(structsockaddr*)&cli_addr,&cli_len);fcntl(new_sockfd,F_SETFL,O_NO
5、er_link[MAX_CLIENT];intuserfd[MAX_CLIENT];charusername[MAX_CLIENT][MAX_NAME];charline[MAX_LINE];intuserCount;..unsignedintcli_len;structsockaddr_incli_addr;FILE*file;intport,i,j,k,l;intlength;charname[MAX_LINE];charcmpstr[MAX_LINE];charlinestr[MAX_LINE];char*ps,*pt,*pr;char*pl,*pn;file=fopen("config
6、","r");fgets(line,MAX_LINE,file);fscanf(file,"%d",&port);fclose(file);printf("%d",port);sockfd=init_ser(port);if(sockfd==0){printf("Initseversocketerror");fflush(stdout);//exit(1);}//Socketinitdonelisten(sockfd,MAX_CLIENT);..cli_len=sizeof(cli_addr);for(i=0;i7、ame[i][0]=' ';}userCount=0;fcntl(sockfd,F_SETFL,O_NONBLOCK);for(;;){if((userCount=user_free(user_link))>=0){new_sockfd=accept(sockfd,(structsockaddr*)&cli_addr,&cli_len);fcntl(new_sockfd,F_SETFL,O_NO
7、ame[i][0]=' ';}userCount=0;fcntl(sockfd,F_SETFL,O_NONBLOCK);for(;;){if((userCount=user_free(user_link))>=0){new_sockfd=accept(sockfd,(structsockaddr*)&cli_addr,&cli_len);fcntl(new_sockfd,F_SETFL,O_NO
此文档下载收益归作者所有