linux下的聊天程序_第1页
linux下的聊天程序_第2页
linux下的聊天程序_第3页
linux下的聊天程序_第4页
linux下的聊天程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统实验报告课程名称实验学期 20操作系统11至2012学年第 -一学期学生所在系部通信工程系年级 2008专业班级010812班学生姓名路遥学号 01081191任课教师陈晨实验成绩通信工程系制课前资料:参考资料查阅工具:man,女口 man ls,man make;C 编写手册,机器上“ linux c 参考 ”;Shell 编写手册,机器上“ linux shell 参考“;Makefile 编写手册,机器上“ makefile 参考“;Awk 编写手册,机器上“ awk 参考“; 经典书籍,学习 linux,unix 的最佳书籍“ Linux ,unix shell 编程指南“一、

2、实验题目:熟悉linux操作系统下最简单实用的通信程序socket最好能全部完成,否则按照完成情况打分。二、实验目的:通过对socket的编写,可以了解linux下最简单实用的进程通信方法,为后续信号灯、消息 队列等学习奠定基础。三、实验设备及环境:1. 硬件设备: PC 机一台2. 软件环境:安装 Linux 操作系统,并安装相关的程序开发环境,如 C C+tshbsh 等编程 语言环境。四、实验内容及要求:(1)用 C 语言编程实现 linux 简单的聊天室功能。用户程序命名为 client.c; 服务器程序命名为 server.c绑定端口等信息见实验方法内容;要求client可以通过 s

3、ocket连接server在 client, 提示输入服务器 ip若连接 server 的 socket 建立成功,返回提示信息Client输入的聊天内容在 client端(多个client端)和server端同时显示; 多个client可同时接入server进入聊天室,最多支持 20个client ; Client 端输入 quit 退出连接, server 端提示 client 退出。可选择使用多线程实现多客户端;其他细节见输出结果;五、实验方法内容1. 需要的头文件 #include #include #include #include #include #include #includ

4、e #include #include #include #include表示是否用户确定退出2. 主要的常量变量 客户端: #define TRUE 1 #define PORT 5000 int quit=0; /quit服务器端:#define MAXLINE 1000 /在一条消息中最大的输出字符数#define LISTENQ 20#define PORT 5000 #define MAXFD 20 void *get_client(void *); int i,maxi=-1;/maxi/最大监听队列/监听端口/最大的在线用户数量 表示当前 client 数组中最大的用户的 i 值

5、int clientMAXFD;3. 主要模块 客户端:int main(void)void *get_server(void* sockfd)/get_server 函数,用于接受服务器转发的消息 服务器端:int main()void *get_client(void *sockfd) /运行 get_client 函数,处理用户请求六代码 考虑大家没做过,给几个例子: 参考 socket 编程 .pdf*客户端程序 client.c */#include #include #include #include #include #include #include #include #def

6、ine TRUE 1#define PORT 5000static int sockfd;void recvfromserver() / 接受服务器消息线程入口函数 char mes1024;int nbytes=0;while(1) memset(mes,0,sizeof(mes); nbytes=read(sockfd,mes,sizeof(mes); if(nbytes0)mesnbytes=0; printf(%sn,mes); pthread_exit(NULL);int main(int argc, char *argv)/ int sockfd;char buffer1024;s

7、truct sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;char strhost16;char clientname20;char mes1024;int thr_id;/* thread ID for the newly created thread */pthread_t p_thread;/* threads structure*/if(argc!=1)fprintf(stderr,Usage:%s an,argv0); exit(1);printf( 请输入服务器 ip 地址 n);scanf(%

8、s,strhost); if(host=gethostbyname(strhost)=NULL) fprintf(stderr,Gethostname errorn); exit(1);/* 客户程序开始建立 sockfd 描述符 */printf( 正在建立套接口 .n); if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) fprintf(stderr,Socket Error:%san,strerror(errno); exit(1);/* 客户程序填充服务端的资料 */ bzero(&server_addr,sizeof(server_addr);

9、server_addr.sin_family=AF_INET; server_addr.sin_port=htons(PORT); server_addr.sin_addr=*(struct in_addr *)host-h_addr); printf( 套接口创建成功,正在链接服务器 .n);/* 客户程序发起连接请求 */if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1) fprintf(stderr,Connect Error:%san,strerror(errno); exit(

10、1);/* 连接成功了 */printf( 链接服务器成功 n 欢迎来到聊天室 n);printf( 请输入你的用户昵称 n);scanf(%s,clientname);/ write(sockfd,clientname,sizeof(clientname);printf(nn 开始聊天吧( Quit 断开连接) nn);thr_id = pthread_create(&p_thread, NULL, recvfromserver, NULL); while(1)memset(buffer,0,sizeof(buffer);memset(mes,0,sizeof(mes);scanf(%s,b

11、uffer);strcat(mes,clientname);strcat(mes,:);strcat(mes,buffer);/ printf(main thread %sn,mes);if(write(sockfd,mes,sizeof(mes)=-1)fprintf(stderr,Write Error:%sn,strerror(errno); exit(1);if(strcmp(buffer,Quit)=0)break;/* 结束通讯 */close(sockfd);exit(0);/* 服务器程序#include (server.c)*#include #include #includ

12、e #include #include #include #include / 在一条消息中最大的输出字符数/ 最大监听队列/ 监听端口/ 最大的在线用户数量#define MAXLINE 1000#define LISTENQ 20表示当前 client 数组中最大的用户的#define PORT 5000 #define MAXFD 20 void *get_client(void *); int sockfd,i;static int maxi=0;/maxi static int clientMAXFD;void recvandsend(void)/ 监听转发线程入口函数int ind

13、ex=0;int nbytes=0; char buffer1024;int len;int outindex=0; while(1)if(maxi0)memset(buffer,0,sizeof(buffer);nbytes=0;/index+; nbytes=read(clientindex+,buffer,sizeof(buffer); printf(%d,%dn,index,clientindex);if(nbytes0)buffernbytes=0;printf( %sn,buffer);outindex=0;while(outindex=maxi) index=0; pthread

14、_exit(NULL);int main(int argc, char *argv)/ int client_fdLISTENQ,clientnum=0;struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size,portnumber; char hello=Hello! Are You Fine?n;int thr_id;/* thread ID for the newly created thread */*/pthread_t p_thread; /* threads structureint

15、new_fd=0; memset(client,0,sizeof(client);if(argc!=1)fprintf(stderr,Usage:%s portnumberan,argv0);exit(1);/* 服务器端开始建立 socket 描述符 */ if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) fprintf(stderr,Socket error:%sna,strerror(errno); exit(1);/* 服务器端填充 sockaddr 结构 */ bzero(&server_addr,sizeof(struct sockaddr_i

16、n); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr=htonl(INADDR_ANY); server_addr.sin_port=htons(PORT);/* 捆绑 sockfd 描述符 */if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1) fprintf(stderr,Bind error:%sna,strerror(errno); exit(1);printf( 服务器监听端口 %d.n,PORT);/* 监听

17、 sockfd 描述符 */ if(listen(sockfd,LISTENQ)=-1) fprintf(stderr,Listen error:%sna,strerror(errno); exit(1);thr_id = pthread_create(&p_thread, NULL, recvandsend, NULL); printf( 欢迎来到本聊天室 n);while(1)/* 服务器阻塞 ,直到客户程序建立连接 */ if(maxi=20)printf( 以达到人数上线 n);continue;sin_size=sizeof(struct sockaddr_in); if(new_f

18、d=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)=-1) fprintf(stderr,Accept error:%sna,strerror(errno); exit(1);connection/*fprintf(stderr,Server getfrom %sn,i net_n toa(clie nt_addr.sin_addr);*/clie ntmaxi+=new_fd;prin tf(n新用户进入聊天室%dn, new_fd); close(sockfd);exit(0);七、实验结果1.执行结果服务器打开Croo

19、tOhaha root# ./server 服务器监听端口 5000. 欢迎来到本聊天室客户端打开,并输入了地址,昵称Crooroot# - /client请输入服务器IP地址127.0.0.1正在建立套接口.套接口建立成功亍链接服务器中-链接服务器成功欢迎来到聊天室请输入你的用户昵称张三开始聊天吧UQMF断开链接)服务器端显示Eroot(?haha root# ./server 服务器监听端口 5000. 欢迎来到本聊天室新用户进入聊天室客户端2进入roothmhsi root# /client请输入服务器:CP地址127-0.0-1正在建立套接口.套凄口建立成功,链接服务器中链接服务器成功

20、欢迎来到聊天室请输入你的用户昵称 李四开始聊天吧Quit断开链接)服务器显示Eroothaha root# /server 服务器监听端口 5000 欢迎来到本聊天室新用户进入聊天室.新用户进入聊天室张三输入Lrocthaha root# /client 请输入服务器叩地址 127.0.0.1正在建立套接口套接口建立成功工链接服务器中 链接服务器成功 欢迎来到聊天皇请输入你的用户昵称 樂三开始聊天吧 CfQultr断开链接 你好啊,李四张三:你好啊,李四李四端显示roothaha root# /client 请输入服务器TP地址127.0.0.1正在建立套接口套接口建立成功,链接服务器中. 链

21、接服务器成功 欢迎来到聊天室请输入你的用户昵称 李四开始聊天吧Quit断开链接)张三:你好啊,李四服务器显示Crootfihaha root# ./server 服务器监听端口 5000. 欢迎来到本聊天室新用户进入聊天室新用户进入聊天室.来三:你好啊,孝四李四输入rootfihaha root# ./client请输入服务器工P地址127-0.0-1正在建立套接口.套接口建立成功,链接服务器中链接服务器成功欢迎来到聊天室请输入你的用户昵称 李四开始聊天吧(Quif断开链接)张三:你好啊,李四你也好李四:你也好张三显示rootShaha root#ulient请输入服务器IP地址127.0.0.1正在建立套接口 套接口建立成功,链接服务器中 链接服务器成功欢迎来到聊天室请输入你的用户昵称冢三开始聊天吧(Quit*断开链接 你好啊,李四张三:你好啊,李四李四:你也好服务器显示LrootShaha root# /server 服务器监听端口 50

温馨提示

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

评论

0/150

提交评论