欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:27770225       资源大小:666.14KB        全文页数:15页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    网络实验第六组实验报告.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、团队协作的重要性在这里有进步体现了出来,一个人是无法完成这个程序。所以在这里感谢我们成员与我的配合!六、参考文献计算机网络-自顶向下方法七、教师评语:


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开