Linux期末大作业

Linux期末大作业

ID:40560757

大小:924.00 KB

页数:21页

时间:2019-08-04

Linux期末大作业_第1页
Linux期末大作业_第2页
Linux期末大作业_第3页
Linux期末大作业_第4页
Linux期末大作业_第5页
资源描述:

《Linux期末大作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、简单的IRC聊天程序——Linux课程期末实验第一章概述【实验目的】综合应用Linux系统下的网络编程技术,使用C语言,结合软件工程思想,设计并实现一个简单的IRC聊天程序,具有服务器端和客户端,可以是终端字符界面,支持用户管理,用户名/密码注册和登录,支持版面聊天,用户可以选择进入某个版面,版面发言大家可以看到,同时支持点对点私聊,可以选择某个用户进行私聊。从而熟悉在Linux系统所提供的网络通信接口及该系统下的编程思想,深入对计算机系统的理解,并切实提高软件设计开发的能力。【实验原理】一个简单的聊天

2、室,其功能是当这个聊天室中的任何一个用户输入一段字符后,室内的其他用户都可以看到这句话。据此,聊天程序分为客户端和服务器端。客户端对应每一个参加聊天的用户,完成从终端上输入采集并传递到服务器端和从服务器端接收信息输出显示的功能。总体介绍该结构如下。首先是初始化服务器,使服务器进入监听状态:sockfd=socket(AF_INET,SOCK_STREAM,0);//首先建立一个socket,族为AF_INET,类型为SOCK_STREAM。//AF_INET=ARPAInternetprotocols,

3、即使用TCP/IP协议族。//SOCK_STREAM类型提供了顺序的,可靠的,基于字节流的全双工连接。//由于该协议族中只有一个协议,因此第三个参数为0。bind(sockfd,(structsockaddr*)&servaddr,sizeof(serv_addr));//再将这个socket与某个地址进行绑定。//serv_addr包括sin_family=AF_INET协议族同socket。//sin_addr.s_addr=htonl(INADDR_ANY)服务器所接收的所有其他地址//请求建立的

4、连接。//sin_port=htons(SERV_TCP_PORT)服务器所监听的端口。listen(socket,MAX_CLIENT);//地址绑定后,服务器进入监听状态。//MAX_CLIENT是可以同时建立连接的客户总数。服务器进入监听状态后,等待客户建立连接。若客户需要连接,也需要先进行网络部分的初始化工作:sockfd=socket(AF_INET,SOCK_STREAM,0);//与服务器端相同。connect(sockfd,(structsockaddr*)&serv_addr,size

5、of(serv_addr))//客户使用connect建立一个连接。//serv_addr中的变量分别设置为://sin_family=AF_INET协议族同socket//sin_addr.s_addr=inet_addr(SERV_HOST_ADDR)//地址为server所在的计算机地址,本程序中为127.0.0.1//sin_port=htons(SERV_TCP_PORT)端口为服务器监听的端口。当客户建立新连接的时候,服务器使用accept来接收该连接:accept(sockfd,(stru

6、ctsockaddr*)&cli_addr,&cli_len);//在函数返回时,cli_addr中保留的是该连接对方的信息//包括IP地址和对方使用的端口。//accept返回一个新的文件描述符。在服务器进入监听状态以后,使用select方法实现,该方法中的所有描述符都是阻塞的。使用select判断一组文件描述符中时候有一个可读(写),如果没有就阻塞。直到有一个的时候被唤醒。客户端实现如下:由于要处理两个文件描述符,因此需要判断是否有可读写的文件描述符需要加入两项:FD_ZERO(sockset);/

7、/将sockset清空。FD_SET(sockfd,sockset);//把sockfd加入到sockset集合中。FD_SET(0,sockset);//把标准输入(0)加入到sockset集合中。然后客户处理如下:while(不想退出){select(sockfd+1,&sockset,NULL,NULL,NULL);//此时该函数使进程阻塞,直到标准输入或者sockfd中有一个可读为止//第一个参数是0和sockfd中的最大值加1//第二个参数是读集合,也就是sockset//第三、四个参数是写集

8、,在本程序中都为空//第五个参数为超时时间,即在指定的时间仍然没有可读,则报错并返回。//当该参数被设置为NULL时,超时时间为无限长。//当select因为可读返回时,sockset中包含的只是//可读的那些文件描述符。if(FD_ISSET(sockfd,&sockset)){//FD_ISSET这个宏判断sockfd是否属于可读的文件描述符/**从sockfd中读入,输出到标准输出上去。*/}if(FD_ISSET(0,&sockse

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。