版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机网络 课程设计报告课 题: 广播通信设计 专 业 班 级: 计科10101班 姓名(学号): 晏丽君(201017010142) : 胡 涛 (201017010102) 指 导 教 师: 梅 晓 勇 评阅意见:评定成绩: 指导老师签名: 年 月 日目 录目 录1.目的和意义2 1.1 设计目的 2 1.2 设计意义 22.基本原理2 2.1概述 2 2.2作用 33.需求分析3 3.1系统功能需求分析 3 3.2 功能函数部分 34.概要设计3 4.1编程环境 3 4.2 模块分析 45.详细设计 4 5.1具体实现过程5 5.2主要数据结构86.嗅探器的实现与测试8 6.1实现与测
2、试87.心得结论128.参考文献 121.目的和意义1.1设计目的1掌握广播通信技术;2了解基于winsock api的消息机制和编程应用方法;3了解windows sdk编程架构。1.2设计意义通过此次课程设计,能够基本掌握广播通信技术,了解基于winsock api的消息机制和编程应用方法,以及windows sdk编程架构。通过查阅资料,了解单播、广播、多播的区别和联系,以及各自的优缺点和适应范围,并能够在此基础上,完成广播通信的设计。2.基本原理2.1概述根据socket通信原理实现网络中的基于tcp方式的广播通信。服务器端:(1)首先,在实用socket之前,要首先初始化socket
3、; (2)在初始化完成以后,就可以建立服务端的socket,然后实用该sokcet开始侦听整个网络中的连接请求。(3)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。在建立连接的过程中,会产生一个新的socket,我们使用找个socket来进行数据的通信;(4)在通信的过程中,服务器端的产生的新的socket会通过一个消息响应函数来接受到达的数据。数据的发送可以使用servergui()来完成;(5)当完成通信后,服务器关闭与客户端的socket连接。客户端:(1)初始化socket,并建立客户端的socket,确定要连接的服务器的主机名和端口;(2)
4、发送连接请求到服务器,并等待服务器的回馈信息;(3)连接成功后,与服务器进行数据的交互;(4)数据的读取是通过listenserver()来完成的,数据的发送通过client gui()即可;(5)数据处理完毕后,关闭自身的socket连接。2.2作用主机之间采用“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以使得网络成本可以很低廉。3.需求分析3.1系统功能需求分析在计算机网络间的通信中,单播和组播有其独特的优势:单播的信息的接收和传递只在两个节点之间进行;多播既可以一次传送所有的数据,也可
5、以达到只对特定对象传送数据的目的。虽然如此看来,单播和多播足以应对网络间的通信。但是,他们也有一定的缺陷:单播的服务器针对每个客户机发送数据流,在客户数量大,客户机流量大的流媒体应用中,服务器会不堪重负;而多播与单播协议相比没有纠错机制,发生丢包错包后难以弥补。所以,这就使得广播有了更大的需求和存在性。广播不仅网络设备简单,维护简单,布网成本低廉,而且由于服务器不用向每个客户机单独发送数据,服务器流量负载极低。在此次广播通信的设计中,通过启动服务器,然后客户端发送连接服务器的请求,便可实现服务器端到客户端的广播。3.2功能函数部分1.getinputstream() 说明:从对方获取输入流;2
6、. getoutputstream() 说明:从对方获取输出流;3. printstacktrace() 说明:将信息打印在控制台上;4. elementat(i) 说明:返回vector里面存放的第i个元素;5.close() 说明:用于关闭一个被打开的的文件;6. run() 说明:为用户界面线程提供默认的消息循环;7. servergui()说明:服务器端的图形界面设计;8. clientgui () 说明:客户端的图形界面设计;9.getcontentpane() 说明:初始化一个容器,用来在容器上添加上添加一些控件; 4概要设计4.1编程环境1.microsoft windows x
7、p操作系统2.eclipse3.7.2 软件4.2模块分析1.服务器模块:服务器端需要引入两个包,java.io包和包,io包是解决输入输出流的问题,net包包含了socket编程所需要的api,服务器端首先要得到serversocket的对象;服务器端socket对象通过accept()方法开始监听连接过来的客户端信息。如果有客户端信息过来,则对象soc调用输入输出流的方法,soc.getinputstream(),同时把得到的getinputstream封装在datainputstream当中,在客户端通信时,有可能两端存在于不同的操作系统,datainputstream可以很好的解决这个
8、问题。2.客户端模块:客户端代码与服务器端大多类似,有一点显著不同,在客户端没有serversocket类,即客户端不用监听任何连接,只需要发送即可。通过与服务器端的连接,就可以得到聊天对象soc。客户端必须首先通过readutf()读取信息,才能接收服务器发送来的信息。 3.监听模块:包含监听服务器端发送的消息listenserver()和监听客户端发送的连接请求以及发送的消息listenclient()。 4.其他功能模块:包含服务器端服务器的启动,服务器的关闭以及客户端的与服务器的连接和客户端的关闭。5.详细设计5.1具体实现过程1.流程图 否是否是开 始服务器端输入端口号,启动服务器客
9、户端输入服务器端ip和端口号,请求连接是否正常启动是否连接成功服务器端对客户端进行广播通信关闭服务器端与客户端结 束图1 具体实现过程流程图2.服务器端: 运用线程thread,服务器端socket对象通过listenserver()开始监听连接过来的客户端信息。如果有客户端信息过来,则对象soc调用输入输出流的方法,soc.getinputstream(),同时把得到的getinputstream封装在datainputstream当中。public class listenserver extends thread private datainputstream in; /使用规定的底层输
10、入流创建一个datainputstream private dataoutputstream out; private socket soc; private jtextarea area; public listenserver(socket soc, jtextarea area) this.soc = soc; this.area = area; try this.in = new datainputstream(soc.getinputstream();/输入流 this.out = new dataoutputstream(soc.getoutputstream();/输出流 cat
11、ch (ioexception e) e.printstacktrace();/输出异常信息 通过run()方法,为用户界面线程提供默认的消息循环。 public void run() while (true) try string s = this.in.readutf();/转化成utf-8编码格式 this.area.append(s); continue; catch (ioexception e) joptionpane.showmessagedialog(null, 服务器异常,无法进行正常聊天,退出程序!); system.exit(0); try this.in.close()
12、; this.out.close(); this.soc.close(); catch (ioexception e1) e1.printstacktrace(); 3.客户端:通过与服务器端的连接,就可以得到聊天对象soc。然后通过listenclient()方法,调用输入输出流的方法,将收到的信息数据打印在控制台上。public class listenclient extends thread public int clientid; private datainputstream in; public dataoutputstream out; public socket soc; p
13、rivate vector v; private string s; private jtextarea area; private jtextfield field; public listenclient(int id, socket soc, vector v, jtextarea area, jtextfield field) this.clientid = id; this.soc = soc; this.v = v; this.area = area; this.field = field; try this.in = new datainputstream(soc.getinpu
14、tstream(); this.out = new dataoutputstream(soc.getoutputstream(); catch (ioexception e) e.printstacktrace(); /打印在控制台上 public void run() while (true) int i; listenclient lc; try this.s = this.in.readutf(); this.area.append(客户 + this.clientid + 说: + this.s); int i1 = 0; listenclient lc1 = (listenclien
15、t)this.v.elementat(i1); synchronized (lc1.out) /加锁,相当于不管哪一个线程(例如线程a),运行到这个方法时,都要检查有没有其它线程b(或者c、 d等)正在用这个方法 lc1.out.writeutf(客户 + this.clientid + 说: + this.s); i1+; continue; catch (ioexception e) i = 0; lc = (listenclient)this.v.elementat(i);/返回vector里面存放的第i个元素 if (lc.clientid != this.clientid) cont
16、inue; try lc.out.close(); lc.in.close(); lc.soc.close(); catch (ioexception e1) e1.printstacktrace();/输出异常信息 this.v.remove(i); this.field.settext(string.valueof(this.v.size(); i+; if (i = this.v.size() continue; 5.2主要数据结构 (1)vector类该类在java.util包中,而且是同步的。由vector创建的tterator,虽然和arraylist创建的iterator是同一接
17、口,但是,因为vector是同步的,当一个iterator被创建而且正在被使用,另一个线程改变了vector的状态(例如,添加或删除了一些元素),这时调用iterator的方法将抛出concurrentmodificationexception,因此必须捕获异常。6嗅探器的实现与测试6.1实现与测试运行servergui.java ,输入端口号(0-65535)就可启动服务器。并可以看到已经连接的客户端书数目。图2 服务器端启动服务器 运行clientgui.java,输入服务器端的ip和端口号,如果输入正确,就可建立与服务器端的连接。图3 客户端连接到服务器端 直接在服务器端输出消息(发送内
18、容不能为空)即可进行广播。客户连接数数目为多少就有多少个客户端主机收到消息。图4 客户端广播消息客户端既能接收到服务器端的广播消息,还能发送消息。图5 客户端接收与发送消息 服务器端与客户端交互的过程中,由于操作不当会引起很多错误。以下是其中的三种情况。是ip或者端口号输入错误,是无客户端只有服务器端,是服务器已关闭。图6 ip或者端口号输入错误图7 无客户端连接图8 关闭服务器端7.心得结论这次为期一周的计算机网络课程设计,我的选题是广播通信设计。刚开始拿到这个课题的时候,确实有点不知从何下手的感觉。说实话,编写程序一直是我比较害怕的,所以对自己是否能够完成任务很是担心。可能这个课题对于编程
19、技术很高的人来说很简单,但是对于我这个很少写代码的人来说是有点难度的。虽说对广播通信的原理明白于心,可还是不知道怎么用代码展示出来。于是,最先想到的是去网上查找资料,网上对于这个选题的资料还是蛮少的,找了很多还没理出什么头绪来。最后,不得不找班上的同学的帮忙,然后,他让我用java语言写一个图形界面的服务端和客户端,然后通过启动,连接和监听实现服务器端的广播功能。直到第四天,我们才大概做完了。虽有缺陷,但毕竟是自己在同学的帮助下做出来的,还是很开心的。一件事情,在做的过程中,虽有诸多磨难,诸多抱怨,但是完成这件事情之后的那种轻松愉悦的感觉是前所未有的。这个设计的完成,让我学到了很多,也有很多同学要去感谢。首先,最显而易见的是,让我知
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑施工脚手架分包条件范本
- 企业礼品选购合同
- 装卸质量信誉保证
- 专业单项劳务分包协议样本
- 钢铁构造工程协议
- 专业居间融资协议模板
- 存量房屋买卖合同模板
- 确保学费按时缴纳约束性保证书模板
- 课堂上我誓守静悄悄
- 农产品购买合同的合同付款条件
- 2025年广东省春季高考英语语法填空专项复习试题二(含答案解析)
- 智能无人机销售合同
- 《微服务体系架构》教学大纲
- 中国铁路南昌局集团有限公司招聘笔试题库2024
- 华为年财务报表分析(共16张课件)
- 幼儿园中班数学活动《营救汪汪队》
- 小儿手足口病课件
- 2024年计算机组成原理期末考试试题及答案共五套
- 沪科版(2024)八年级全一册物理第一学期期末学业质量测试卷(含答案)
- 2024年部编新改版语文小学一年级上册第六单元复习课教案
- 2024年陕西省西安市中考地理试题卷(含答案逐题解析)
评论
0/150
提交评论