下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络编程课程设计报告题 目:基于 Linux 网络聊天室的设计姓 名 :陈佳悦 陈雄兰学 院 :信息科学技术学院专 业 :网络工程班 级 :网络工程 102学 号 :19310213 19310214指导教师 : 薛 卫 职称: 副教授基于 Linux 网络聊天室的设计摘要: 本课程设计是在 Linux 环境下基于 Socket 进行开发的。系统服务器端和 客户端组成。 服务端程序通过共享存储区存储聊天数据, 并发送给每个连接的客 户端。通过多路复用的子进程实现服务端与多个客户端之间的数据发送与接收。 可以在单机上开辟两个窗口分别运行客户、 服务器的程序。本方案经 gcc 调试器 调试成功,可
2、以在机网络聊天中使用。关键词: 网络聊天; linux ;socket1相关概念及技术1.1 网络套接字编程1.1.1 套接字基本概念套接字是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元。可 以将套接字看作不同主机间的进程进行双向通信的端点, 它构成了单个主机内及 整个网络间的编程界面。 套接字存在于通信域中, 通信域是为了处理一般的线程 通过套接字通信而引进的一种抽象概念。 套接字通常和同一个域中的套接字交换 数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序) 。各种 进程使用这个相同的域互相之间用 Internet 协议簇来进行通信。1.1.2 套接字工作原
3、理要通过互联网进行通信,你至少需要一对套接字, 其中一个运行于客户机端, 我们称之为 ClientSocket ,另一个运行于服务器端, 我们称之为 ServerSocket 。根据连接启动的方式以及本地套接字要连接的目标, 套接字之间的连接过程 可以分为三个步骤:服务器监听,客户端请求,连接确认。所谓服务器监听, 是服务器端套接字并不定位具体的客户端套接字, 而是处 于等待连接的状态,实时监控网络状态。所谓客户端请求, 是指由客户端的套接字提出连接请求, 要连接的目标是服 务器端的套接字。 为此,客户端的套接字必须首先描述它要连接的服务器的套接 字,指出服务器端套接字的地址和端口号, 然后就
4、向服务器端套接字提出连接请 求。所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的 连接请求, 它就响应客户端套接字的请求, 建立一个新的线程, 把服务器端套接 字的描述发给客户端, 一旦客户端确认了此描述, 连接就建立好了。 而服务器端 套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。1.1.3 linux 中 socket 的基本应用: 服务端建立套接字的大致步骤:(1 )建立 socket 。(2 ) bindPort 绑定特定的端口。(3 )listen 监听特定的端口。(4 )accept, 当有客户端连接服务器端口时, accept 接收信息,并返回新的
5、 套接字描述符,提供给操作(5 )根据实际需求, write,read,send,recv 等操作 (6 )关闭套接字。客户端大致步骤:1) 创建 socket.2) 根据服务器地址, connect 连接到特定服务器。3) write,read 等读写操作。4) 关闭套接字。1.2 客户/ 服务器模型 应用程序之间为了能顺利地进行通信, 一方通常需要处于守候状态, 等待另 一方请求的到来。 在分布式计算中, 一个应用程序被动地等待, 而另一个应用程 序通过请求启动通信的模式就是客户服务器模式。客户/ 服务器模型的典型运行过程包括五个主要步骤:(1) 服务器监听相应窗口的输入。(2) 客户机发
6、出请求。(3) 服务器接收到此请求。(4) 服务器处理此请求,并将结果返回给客户机。(5) 重复上述过程,直至完成一次会话过程任务。运作过程如下:请求请求 Request响应响应 Request客户机进程通信设备服务器图 客户 /服务器模型运作过程1.3 多路复用技术多路复用一般有以下几种技术 :(1) 非阻塞通信技术 : 将文件管道设为非阻塞通信方式 , 每隔一段时间对 他们实行一次轮询 , 以判断是否可以进行读写操作。(2) 信号驱动的异步 I/O 技术。首先 , 异步 I/O 是基于信号机制的 , 并不可 靠。其次 , 单一的信号不足以提供更多的信息来源。 还是需要辅助以其他的手段 ,
7、实现有很高的难度。(3) select() 技术。在 BSD 中提供了一种可以对多路 I/O 进行阻塞式查询的 方法 select() 。它提供同时对多个 I/O 描述符进行阻塞式查询的方法。(4) 子进程技术。 应用多个子进程 , 每一个对一个单工阻塞方式通信。 所有 子进程通过 IPC 和父进程进行通信。父进程掌管所有信息。该聊天室即采用此 种子进程技术。1.4 相关函数调用(1) Socket()作用: socket函数为客户机或服务器创建一个 sokcet格式: int socket(int family,int type,int protocol); 参数说明:Family :表示地
8、址族,可以去 AF_UNLX和 AF_INT。其中,AF_UNLX只能够用于单一的 UNIX系统进程间通信 ;AF_INT是针对 Internet 的,因而可以允许在远程主机之间通信,实验中使用 AF_INT。Type :网络程序所采用的通信协议, 可以取 SOCK_STREA或MSOCK_DGR。A其M 中, SOCK_STREA表M明使用的是 TCP协议,这样提供按顺序的、可靠的、双向、面向连 接的比特流; SOCKE_DGRA表M明使用的是 UDP协议,这样只会提供定长、不可靠、 无连接的通信。(2) bind( )格式: int bind(int sockfd,struct socka
9、ddr *addr,int addrlen);参数说明:Sockfd : socket 的文件描述符号。Sockaddr :表示名字所用的一个数据结构,用来保存地址 ( 包括 IP 地址和端口 )Addrlen: 设置结构大小长度。(3) listen()格式: int listen(int sockfd, int backlog);作用:监听连接信号,和 accepted 函数合同。参数说明:Sockfd :表示 socket 调用返回的文件描述符。Backlog :表示接入队列允许的连接数目,大多数系统允许 20 个,也可以子定义 510 个。(4) accept()格式: Int acc
10、ept (int sockfd, void *addr, int *addrlen);作用:与 listen 函数合用,监听信息、接收客户端请求。 参数说明:Sockfd :表示 socket 的文件描述符。Addr :表示指向局部的数据结构 struct sockaddr-in 的指针。Addrlen :表示地址的长度。(5) connect()int格 式 : int connect( int sockfd , struct sockaddr *serv_addr addrlen);作用:在面向连接的系统中客户及连接服务器时使用, connect 必须在 bind 后 使用。参数作用:So
11、ckfd :表示 socket 的文件描述符。Serv-addr :表示村访目的端口和 ip 地址(套接字)的数据结构。(6) send() 和 recv()格式 1: Int send (int sockfd, const vod *msg,int len, int flags); 功能:发送信息。格式 2: Int recv (int sockfd , void *buf,int len, usigned int flags);作用:用于流式 socket 、数据报 socket 内部之间的通信。(7) bindPort()格式: int bindPort(unsigned short i
12、nt port)作用:创建套接字,并绑定到指定端口。参数说明:指定所指定的端口号。(8) fork() 作用:创建一个新的子进程,而这个子进程是父进程的副本,接下来这两个进 行就由操作系统调度,直到程序执行结束。2. 系统设计与功能分析2.1 整体程序设计:服务端程序通过共享存储区存储聊天数据, 并发送给每个连接的客户端; 服 务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的, 以避免数 据冲撞.服务器端程序设计:(1) 建立服务器端,创建共享存储区,便于客户与客户之间的信息交流,及 服务端的记录。( 2) 创建 socket 套接字 ,并绑定到指定端口, 监听套接字(客户套接字)
13、。 ( 3) 在监听过程中接受客户端连接,并发送问候信息。( 4)接收到客户端连接的信息后开始创建子进程, 其中父进程用于接受信息, 子进程用于发送信息,实现多线程操作。2.1.2 客户端程序设计:(1) 建立一个客户端的 socket 套接字,绑定客户端套接字连接服务端。(2) 连接成功后,创建子进程,其中父进程用于接受信息,子进程用于 发送信息。(3)创建子进程成功后,可以进行客户端与客户端的通信聊天。2.2 系统功能 :(1)创建服务器后,服务器创建了共享存储区,方便客户与客户之间聊天 信息的记录,包括聊天具体内容及时间记录。(2)客户端创建后如 xx(需输入 ip 地址、端口号、用户名
14、 如下面截图实 例:xx ),在服务器的监听下,很快 xx 就与服务器建立了 连接。(3)与此同时另一客户 yy 创建,同理 yy 也与服务器建立了连接,此时两 客户端就可以通过服务器建立连接,开始聊天。(4)在服务器上,也一直记录了客户端间的聊天记录具体信息。3. 主要算法及流程图图 5 为客户端主程序的流程图;图 6 为客户端 get() 函数即文件下载的流程图;图 7 为服务器端出程序流程图;4. 系统开发调试与运行环境开发环境:本系统是在 Linux 环境下用 C语言结合网络编程知识开发的运行环境:虚拟机: Vmware操作系统: Ubuntu-11.10-desktop5. 实验运行
15、效果截图演示:第一部分:( 1)服务器端:编译 s.c 即服务器端程序,运行,显示如下:说明连接成功,服 务器正在监听,有无客户端请求(2)客户端 1:编译 c.c 即客户端程序,运行指定 IP 地址为本机地址,端口号 为 6666 ,用户名为 xx ,显示如下:说明已经进入群聊的聊天室。(2)客户端 2:编译 c.c 即客户端程序,运行指定 IP 地址为本机地址,端口号 为 6666 ,用户名为 yy ,显示如下:说明已经进入群聊的聊天室。第二部分:(1)客户端 1:开启聊天功能, xx 在界面上发起对话2)客户端 2:当 xx在自己的客户端 1 界面上发起对话,客户端 2界面显示内容,同时
16、 yy也向 xx即客户端 1发送内容( 3)服务器端: 服务器接收客户端 1(xx)发送的内容并且传送给客户端 2(yy), 同时接收 yy 发送的内容再转发给 xx。第三部分:聊天截图hehelocalhost:/Desktop XFileEdit View Search Terminal Help|Hello "Welcome to the chat room!xx:hi? (10:18:14)hello/y:hello (10:18:24)xx:Have we ever beared? (10:20:0)oh.you have forgetten!/y:oh,you have
17、forgetten! (10:20:22)met last month/y:we met last month (10:20:42)hehelocalhost:-/DesktopFile Edit View Search Terminal HelpheheClocalhost Desktop$ gcc -o c c.c|He I to! Welcome to the chat room! hi?xx:hi? (10:18:14)yy:he:lo (10:18:24)Have we ever heared?xx:Have we ever heared? (10:20:0)yy:oh.you ha
18、ve forgetten! (10:20:22)yy:we met last month (10:20:42)虽然实现的只是一个功能相对比较简单的程序, 但是期间受益匪浅, 一方面是考 察了这一个学期来对 linux 内核编程的学习成果, 检验了综合运用所学知识点的 能力,尝试将书本的理论知识运用到实践中, 另一方面在实践中加深了对理论知 识的理解,发现理论到实际所出现的问题、困难,以及寻找解决的方案,与此同 时能够让我们认清自己在学习 Socket 编程不足之处和薄弱环节,并加以弥补和 巩固,并且通过对线程同步程序的设计和运用,进一步的巩固用 Socket 编程的 能力,并且也更好的理解操作系统的工作形式。第一次采用 采用 C/S 架构并且 在 linux 环境下编写程序,比较新鲜但是 期间我们也遇到了很多的困难,例如:( 1) socket 实现过程:服务器端的 recv() 函数,不同情况下,返回的次数 不清楚, 其实是对返回的条件不清楚, 后来经过查阅资料以及对事例的研究, 基 本清楚了它的运用。( 2)在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮业食品安全管理与监督手册(标准版)
- 金融风险管理理论与方法(标准版)
- 会议安全管理与应急预案制度
- 公共交通服务设施管理制度
- 车站环境卫生管理制度
- 养老院档案信息管理制度
- 2026年柳州银行股份有限公司招聘备考题库及完整答案详解一套
- 中信证券股份有限公司分支机构2026年校园招聘备考题库有答案详解
- 养老院入住老人健康监测制度
- 2026年重庆飞驶特人力资源管理有限公司派往某单位党建工作辅助岗招聘备考题库及完整答案详解1套
- 成都2025年四川成都市新津区招聘卫生专业技术人才21人笔试历年参考题库附带答案详解
- 2026届广东省高考英语听说考试备考技巧讲义
- 2026年经营人员安全生产责任制范文
- 2026年及未来5年中国锻造件行业市场深度分析及发展前景预测报告
- 2025年荆楚理工学院马克思主义基本原理概论期末考试真题汇编
- 2026年恒丰银行广州分行社会招聘备考题库带答案详解
- 纹绣风险协议书
- 【语文】湖南省长沙市雨花区桂花树小学小学一年级上册期末试卷(含答案)
- 贵港市利恒投资集团有限公司关于公开招聘工作人员备考题库附答案
- 2026年及未来5年市场数据中国大型铸锻件行业市场深度分析及投资战略数据分析研究报告
- 林草湿地生态调查监测技术探索
评论
0/150
提交评论