ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:666.14KB ,
资源ID:27770225      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27770225.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络实验第六组实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络实验第六组实验报告.docx

1、网络实验第六组实验报告云南大学数学与统计学实验教学中心实验报告课程名称:计算机网络实验学期:2012-2013学年第一学期成绩:指导教师: 陆正福学生姓名:卢富毓 学生学号:20101910072实验名称:网络编程环境的准备实验 实验要求: 必做实验学时:4学时实验编号: 六实验日期:2012/11/21完成日期:2012/9/30学院:数学与统计学院专业 : 信息与计算科学年级: 2010级 一、 实验目的:通过实验,进一步的了解路由器的原理,同时加深网络编程二、实验内容: 1. 路由表的构造原理分析2. 基于Socket编程,实现以端系统为基础的数据多路转发 本实验的指导思想: 将“UDP

2、段”看成“IP数据报”的近似形式,通过主机模拟实现“IP路由器”的主要功能:数据转发、路由决策等。通过此实验学会“软路由”的基本编程原理。三、实验环境Windows XP、win7 java平台四、实验过程(请学生认真填写):1. 预备知识A、 对路由器工作原理的分析,路由器是如何工作的、它的功能有些什么。这些事我们需要最先了解的。B、 在了解了路由器是如何工作的之后,我们需要对UDP编程的知识有一定的了解以及如何用java语言来试验,这是我们必须要考虑的,毕竟我们是实现一个A-Router-B、或者A-Router-C的模型以及解决他们是怎样相互通信。(这里,在接收/发送端必须用线程来实现,

3、Router端则可有可无)2. 实验过程:步骤一、原理分析:从整体来看,很容易理解路由器,他就是起到一个连接以及转发(路由算法等,都是以转发为目的)。但是细节个人觉得有些难。所以我们做实验的时候也是从整体,从他的转发功能来考虑的。步骤二、路由表的构造原理分析所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网

4、络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。在现代路由器构造中,路由表不直接参与数据包的传输,而是用于生成一个小型指向表,这个指向表仅仅包含由路由算法选择的数据包传输优先路径,这个表格通常为了优化硬件存储和查找而被压缩或提前编译。步骤三、图示分析路由表步骤四、代码以及结果由步骤一的叙述和步骤三图,我们就可以清晰的了解路由器的工作原理了。代码如下:/HashMapTes.Javaimport java.util.*;/* * author 卢富毓、吕世嘉、刘君宇、杨清想 */* *通过HashMap来实现一个转发表的设置 */public class HashMapT

5、es byte flag; String IPaddress; public HashMapTes(byte flag) this.flag = flag; public String seeksIP() /转发表 Map map = new HashMap(); map.put(byte) 1, 192.168.0.106); map.put(byte) 2, 192.168.0.104); map.put(byte) 3, 192.168.0.103); map.put(byte) 0, 192.168.105); Iterator iter = map.keySet().iterator

6、(); while (iter.hasNext() Object key = iter.next(); byte k = (Byte) key; if (k = flag) IPaddress = map.get(key); return IPaddress; return 127.0.0.1; /UDPClient.javaimport .*;import java.io.*;/* * author 卢富毓、吕世嘉、刘君宇、杨清想 */public class UDPClient /* * param args * throws IOException * 路由表: 1, 192.168.0

7、.106、 2, 192.168.0.104、 3, 192.168.0.103、 0, * 192.168.105 */ static DatagramSocket clientsocket; static boolean b = true; static String RouterIP = 127.0.0.1; / 路由IP的更改 static byte bflag = 0; / 对于flag的更改 public static void main(String args) throws IOException clientsocket = new DatagramSocket(9999);

8、 / 创建一个端口号9999 new UDPClient().start(); / 开始消息的发送以及接受 /* * 启动两个线程sender 、receive用来分别监听接收与发送! */ public void start() sender s = new sender(); receive r = new receive(); new Thread(s).start(); / 启动线程 new Thread(r).start(); / 启动线程 /* * 发送的线程 */ class sender implements Runnable BufferedReader infromuser

9、 = new BufferedReader(new InputStreamReader( System.in); public void run() try while (b) Sender(clientsocket, infromuser); catch (SocketException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); /* * 接收的线程 */ class receive implements Runnable byte recvdata = new byte1024; public vo

10、id run() try while (b) Receive(clientsocket, recvdata); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); private static void Sender(DatagramSocket clientsocket, BufferedReader infromuser) throws IOException, SocketException byte senddata; byte buf = new byte1024; byte fla

11、g = bflag; / bflag代表 了要给谁发信息 / 从键盘读入一行 String str = infromuser.readLine(); senddata = str.getBytes(); / 实现了一个字符串的连接 buf0 = flag; System.arraycopy(senddata, 0, buf, 1, senddata.length); senddata = buf; / 进行发送 DatagramPacket sendpacket = new DatagramPacket(senddata, senddata.length, new InetSocketAddr

12、ess(RouterIP, 6789); clientsocket.send(sendpacket); private static void Receive(DatagramSocket clientsocket, byte recvdata) throws IOException String str; / 数据报打包 DatagramPacket recvpacket = new DatagramPacket(recvdata, recvdata.length); / 打好包的packet用来接收数据 clientsocket.receive(recvpacket); / 把接收来的数据

13、String化 str = new String(recvpacket.getData(); str = str.trim(); /trim方法是用来把null的地方清楚,只留下字符串的真实长度 System.out.println(From Router : + str); / 如果受到的字符串为exit则推出; / 但是这里有点问题,需要修改,不然不能退出 / 由于时间的问题,这里没有给予解决,但是并没有影响到路由的实现 if (str.equals(exit) b = false; / Router.javaimport java.io.*;import .*;import java.u

14、til.Date;/* * author 卢富毓、吕世嘉、刘君宇、杨清想 */public class Router static String IPaddress; static InetAddress addr; public static void main(String args) throws IOException DatagramSocket serversocket = new DatagramSocket(6789); byte senddata = new byte1024; byte recvdata = new byte1024; while (true) /创建一个p

15、acket来接收数据 DatagramPacket recvpacket = new DatagramPacket(recvdata, recvdata.length); /接收数据的方法 senddata = Receive(serversocket, recvpacket); /转发收到的消息 Sender(serversocket, senddata, recvpacket); private static byte Receive(DatagramSocket serversocket, DatagramPacket recvpacket) throws IOException byt

16、e senddata; byte buf = new byte1024; /具体的就收数据 serversocket.receive(recvpacket); String str = new String(recvpacket.getData(); senddata = str.getBytes(); /得到flag,然后转发(相当于转发时候的路由选择操作) byte flag = senddata0; System.out.println(log time: - + (new Date().toString() + -); System.out.println(Header : + fla

17、g); System.out.println(From : + recvpacket.getSocketAddress(); HashMapTes H = new HashMapTes(flag); IPaddress = H.seeksIP(); addr = InetAddress.getByName(IPaddress); /进行数组中的数据截取 System.arraycopy(senddata, 1, buf, 0, buf.length - 1); System.arraycopy(buf, 0, senddata, 0, buf.length); return senddata;

18、 private static void Sender(DatagramSocket serversocket, byte senddata, DatagramPacket recvpacket) throws IOException /创建一个发送数据需要的packet DatagramPacket sendpacket = new DatagramPacket(senddata, senddata.length, addr, recvpacket.getPort(); System.out.println(To : + addr);/System.out.println(recvpacke

19、t.getPort() + !); serversocket.send(sendpacket); String str = new String(sendpacket.getData().trim(); System.out.println(str); Eclipse运行结果如下:/来自吕世嘉发给刘君宇信息的截图/来自刘君宇发给卢富毓信息的截图/来自卢富毓发给吕世嘉信息的截图/来自杨清想控制的router的log信息五、实验总结1遇到的问题及分析:遇到问题:如何把头部值(flag)加入数组中去 分析并解决:由于用的byte数组,所以在加入的过程中,我采用来的复制的方法(AtoB)来添加flag

20、的。这样的后果就是在打印的时候不没有存值得地方也当做空格打印了出来(byte1024 并没有用完,可能要发的信息只有几bit,但是后面没用的也打印了出来),但是,在最后终于找到了解决的方法就是用trim()这个方法! 遇到问题:发送和接收消息是连续、或者是分几次发送的,但是在实验过程中发一次之后,程序就结束了。 分析并解决:我们再实验的时候,应当考虑到sender端虽然是有接收与发送组成,但是这两者之间并没有一次的次序以及关联。所以我们需要用线程来是这二者分开执行。2体会和收获。1、加深了对路由器的理解以及对路由器的运行有了一个大致的了解。这对我们学习网络层这一章来说,这是一个对课本知识的加深巩固,以及发现自己理解是否正确的一个检验。2、对于用java来编写程序又有了一点进步。对于查API文档的能力又有了进一步的提升(由于是转发,需要目标的IP地址,这就需要我们查这方面的API文档的知识,来加以运用)。 3、团队协作的重要性在这里有进步体现了出来,一个人是无法完成这个程序。所以在这里感谢我们成员与我的配合!六、参考文献计算机网络-自顶向下方法七、教师评语:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1