网络编程实验报告

上传人:m**** 文档编号:170610531 上传时间:2022-11-21 格式:DOCX 页数:15 大小:107.85KB
收藏 版权申诉 举报 下载
网络编程实验报告_第1页
第1页 / 共15页
网络编程实验报告_第2页
第2页 / 共15页
网络编程实验报告_第3页
第3页 / 共15页
资源描述:

《网络编程实验报告》由会员分享,可在线阅读,更多相关《网络编程实验报告(15页珍藏版)》请在装配图网上搜索。

1、网络编程实验报告络编程课程设计报告题目: 姓 名: 学 院: 专业: 班级: 学 号: 指导教师:基于Linux网络聊天室的设计陈佳悦 陈雄兰信息科学技术学院网络工程网络工程1021931021319310214薛卫职称:副教授基于Linux网络聊天室的设计摘要:本课程设计是在Linux环境下基于Socket进行开发的。系统服务器端和 客户端组成。服务端程序通过共享存储区存储聊天数据,并发送给每个连接的 客户端。通过多路复用的子进程实现服务端与多个客户端之间的数据发送与接 收。可以在单机上开辟两个窗口分别运行客户、服务器的程序。本方案经gcc 调试器调试成功,可以在机网络聊天中使用。关键词:网

2、络聊天;linux ; socket仁相关概念及技术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) 根据实际需求,write,read,send,recv等操作(6) 关闭套接字。客

5、户端大致步骤:1) 创建 socket.2) 根据服务器地址,connect连接到特定服务器。3) write,read等读写操作。4) 关闭套接字。1.2客户/服务器模型应用程序之间为了能顺利地进行通信,一方通常需要处于守候状态,等待 另一方请求的到来。在分布式计算中,一个应用程序被动地等待,而另一个应 用程序通过请求启动通信的模式就是客户/服务器模式。客户/服务器模型的典型运行过程包括五个主要步骤:(1) 服务器监听相应窗口的输入。(2) 客户机发出请求。(3) 服务器接收到此请求。(4) 服务器处理此请求,并将结果返回给客户机。(5) 重复上述过程,直至完成一次会话过程任务。运作过程如下

6、:客I服图客户/服务器模型运作过程1.3多路复用技术多路复用一般有以下几种技术:(1) 非阻塞通信技术:将文件管道设为非阻塞通信方式,每隔一段时间对 他们实行一次轮询,以判断是否可以进行读写操作。(2) 信号驱动的异步I/O技术。首先,异步I/O是基于信号机制的,并不 可靠。其次,单一的信号不足以提供更多的信息来源。还是需要辅助以其他的 手段,实现有很高的难度。(3) select()技术。在BSD中提供了一种可以对多路I/O进行阻塞式查询 的方法select()。它提供同时对多个I/O描述符进行阻塞式查询的方法。 子进程技术。应用多个子进程,每一个对一个单工阻塞方式通信。所 有子进程通过IP

7、C和父进程进行通信。父进程掌管所有信息。该聊天室即采用 此种子进程技术。1 . 4相关函数调用(1) Socket()作用:socket函数为客户机或服务器创建一个sokcet格式: int socket(int family,int type,int protocol);参数说明:Fam订y:表示地址族,可以去AF_UNLX和AF_INT。其中,AF_UNLX只能够用于单一的UNIX系统进程间通信;AF_INT是针对Internet 的,因而可以允许在远程主机之间通信,实验中使用AF_INT。Type:网络程序所采用的通信协议,可以取SOCK_STREAM或SOCK_DGRAM。其中, SO

8、CK_STREAM表明使用的是TCP协议,这样提供按顺序的、可靠的、双向、面向连接 的比特流;SOCKE_DGRAM表明使用的是UDP协议,这样只会提供定长、不可靠、无连 接的通信。(2) bind()格式:int bind(int sockfd,struet sockaddr *addr,int addrlen);参数说明:Sockfd: socket的文件描述符号。Sockaddr:表示名字所用的一个数据结构,用来保存地址(包括IP地址和端口) Addrlen:设置结构大小长度。(3) lis ten()格式:int listen(int sockfd, int backlog);作用:监

9、听连接信号,和accepted函数合同。参数说明:Sockfd: 表示socket调用返回的文件描述符。Backlog:表示接入队列允许的连接数目,大多数系统允许20个,也可以子定义5 10个。(4) accep t()格式:Int accept (int sockfd, void *addr, int *addrlen);作用:与listen函数合用,监听信息、接收客户端请求。参数说明:Sockfd:表示socket的文件描述符。Addr:表示指向局部的数据结构struct sockaddr-in的指针。Addrlen :表示地址的长度。(5) connect()格式: int connec

10、t( int sockfd , struct sockaddr *serv_addr , int addrlen);作用:在面向连接的系统中客户及连接服务器时使用,connect必须在bind后 使用。参数作用:Sockfd:表示socket的文件描述符。Serv-addr:表示村访目的端口和ip地址(套接字)的数据结构。(6) send()和 recvO格式 1: Int send (int sockfd, const vod *msg,int len, int flags);功能:发送信息。格式 2: Int recv (int sockfd , void *buf,int len, us

11、igned int flags);作用:用于流式socket、数据报socket内部之间的通信。(7) bindPort()格式:int bindPort(unsigned short int port)作用:创建套接字,并绑定到指定端口。参数说明:指定所指定的端口号。(8) fork()作用:创建一个新的子进程,而这个子进程是父进程的副本,接下来这两个进行就由操作系统调度,直到程序执行结束。2. 系统设计与功能分析2.1整体程序设计:服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端; 服务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的,以避 免数据冲撞.2.1.1服

12、务器端程序设计:建立服务器端,创建共享存储区,便于客户与客户之间的信息交流,及 服务端的记录。(2) 创建socket套接字,并绑定到指定端口,监听套接字(客户套接字)。(3) 在监听过程中接受客户端连接,并发送问候信息。(4) 接收到客户端连接的信息后开始创建子进程,其中父进程用于接受信 息,子进程用于发送信息,实现多线程操作。2.1.2 客户端程序设计:(1)建立一个客户端的socket套接字,绑定客户端套接字连接 服务端。(2)连接成功后,创建子进程,其中父进程用于接受信息,子进 程用于发送信息。(3)创建子进程成功后,可以进行客户端与客户端的通信聊天。2.2系统功能:(1)创建服务器后

13、,服务器创建了共享存储区,方便客户与客户之间聊天 信息的记录,包括聊天具体内容及时间记录。(2)客户端创建后如xx (需输入ip地址、端口号、用户名如下面截图实 例:/c 127001 6666 xx),在服务器的监听下,很快xx就与服务器建立了 连接。(3)与此同时另一客户yy创建,同理yy也与服务器建立了连接,此时两 客户端就可以通过服务器建立连接,开始聊天。(4)在服务器上,也一直记录了客户端间的聊天记录具体信息。3. 主要算法及流程图图5为客户端主程序的流程图;图6为客户端get()函数即文件下载的流程图;图7为服务器端出程序流程图;4. 系统开发调试与运行环境开发环境:本系统是在Li

14、nux环境下用C语言结合网络编程知识开发的。运行环境: 虚拟机:Vmware操作系统:Ubuntu-11 10-desktop5. 实验运行效果截图演示:第一部分:(1)服务器端:编译sc即服务器端程序,运行,显示如下:说明连接成功, 服务器正在监听,有无客户端请求。h ehel oc al host: */D e s ktopFile Edit View Search Terminal Helphehelocalhost Desktop hehelocalhast Desktop bin口 is successful!sever is listening(2)客户端1:编译c.c即客户端程序

15、,运行指定IP地址为本机地址, 为6666,用户名为xx,显示如下:说明已经进入群聊的聊天室。端口号hh pineal host /DesktopFile 旦让 View Search Terminal Helphehefaiocalhost Deslktophehe(31ocalhost DesktopHello!Welcome to the chat room!(2) 客户端2:编译c.c即客户端程序,运行指定IP地址为本机地址,端口号 为6666,用户名为yy,显示如下:说明已经进入群聊的聊天室。File Edit View Search lerminal 旦elphehetalocal

16、liost Desktop$ gcc o c c.chehefalocalhost Desktop $ . /c 127.0.0.1 6666 yyIHellolWelcome to the chat room! 第二部分:(1)客户端1:开启聊天功能,xx在界面上发起对话(2)客户端2:当xx在自己的客户端1界面上发起对话,客户端2界面显示内容,同时 yy 也向 xx 即客户端 1 发送内容。heheLocalhost:/DesktopFile Edit View Search leiminal Help hehetaiocalhost Desktop$ gcc 0 c c.c heheta

17、localhost Desktop $ . /c 127.0.0.1 6666 yyIHello!Welcome to the chat room!xx:hi? (10:18:14)helloyy:hello (10:18:24(3) 服务器端:服务器接收客户端l(xx)发送的内容并且传送给客户端2(yy),同时接收yy发送的内容再转发给XX。三File Edit View Search Tenrninal Help heheIocalhost Desktop gcc -0 s s.c heheglocalhcst Desktopli ./s bind is successful!server

18、 is listeningserver accept f rom : -1215777120 server is listeningserver accept from:-1215777123 server is listeningxx:hi? 110:13:13Jyy:hello (10:18:24)tieheLocalhost:/Desktop第三部分:聊天截图File Edit View Search Terminal Helphehe(alDcalho5t Desktop$ gcc -o c c.c hehe(aiocalhost Desktop ./c 127.0.0.1 6666

19、yy|HelloIWelcome to the cnat room! KX:hi? (10:18:14) neLLo/y:hello (10:18:241 xx:Have we ever heared? (10;20;0) h,you have forgetten!/y:ohFyau have forgetten! (10:20:22)址巳 met last monthyy:we met last month (10:20:4210hehelocalhost:-/Desktop-匚File Edit View Search Terminal Help hehefaiocalhost Deskt

20、op$ gcc -a c c.chehelccalhost Desktop$ ./c 127.0.0.1 6666 xx|HelloSW已Lcom已 to the chat room! hi?xx:hi? (10:18:14)yy:hello (10:18:24)Have we ever heared?xx:Hav已诃已 ever heared? (10:20:01yy:ohryou have forgetten! (10:20:221yy:we met last month (10:20:421File Edit View Search lerminal 旦巳Ip heheQlocaHios

21、t Desktop$ gcc -o s s.c hehelocalhost Desktop$ ./s bind 15 successful!server is listeningserver accept fron:-1215777120 server is listeningserver accept from-1215777120 serv已 is listeningxx:hi? tL0:18:l3yy:hellc (LQ:18:24)xx:Haue we ever heared? (10:28:8) yy:ohpyou have forgetten! (10:2Q:22: yy;we m

22、eT last month (10:20:42)虽然实现的只是一个功能相对比较简单的程序,但是期间受益匪浅,一方面是 考察了这一个学期来对linux内核编程的学习成果,检验了综合运用所学知识 点的能力,尝试将书本的理论知识运用到实践中,另一方面在实践中加深了对 理论知识的理解,发现理论到实际所出现的问题、困难,以及寻找解决的方案, 与此同时能够让我们认清自己在学习Socket编程不足之处和薄弱环节,并加以 弥补和巩固,并且通过对线程同步程序的设计和运用,进一步的巩固用Socket 编程的能力,并且也更好的理解操作系统的工作形式。第一次采用采用C/S架 构并且在linux环境下编写程序,比较新鲜

23、但是期间我们也遇到了很多的困难, 例如:(1) socket实现过程:服务器端的recv()函数,不同情况下,返回的次数 不清楚,其实是对返回的条件不清楚,后来经过査阅资料以及对事例的研究, 基本清楚了它的运用。(2) 在实现多线程的时候,调用pthread_exit()函数使线程退出。需要 注意的地方:一是,主线程中如果从main函数返回或是调用了 exit函数退出 主线程,则整个进程终止,此时所有的其他线程也将终止。另一种是,如果主 线程调用pthread_exit函数,则仅仅是主线程消亡,进程不会结束,其他线 程也不会结束,知道所有的线程都结束时,进程才结束。刚开始接触的时候只是对上课的

24、时候老师给的例子基本分析了解,但是实现的时候一直无法实现多 线程,即并发执行。从编程中体会颇多,学到了很多东西,懂得了怎样建立socket套接字,在 客户端和在服务器端的不同之处,TCP套接字以及加锁解锁和条件变量的作用。 也懂得了网络通信中服务器需要循环等待客户端连接进来,然后创立一个单独 的线程来监听该客户端的行为动作。同时加强了我对TCP/IP Socket编程这门 课程的认识,并且也复习了以前学习到的知识,自己的逻辑思维能力也得到了 一定的提高。通过这次课程的大作业,懂得了理论与实际相结合是很重要的,只有理论 是远远不够的,只有把所学的理论知识与实践相结合起来,从理论知识与实践 相结合,从理论中得出结论,才是真正的知识,才能提高自己的事迹动手能力 和独立思考的能力。另一方面由于对linix的生疏以及编程能力的欠缺,我们实现的只是皮毛 功能,所以之后要对这方面更加重视实践,争取实现更完善的功能。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!