计算机网络--网络程序设计

实验目的

学习网桥的工作原理;
学习校验和算法。

实验环境

Windows环境下运行,程序在单机上运行。
程序设计使用语言为Java
程序设计使用开发工具为intelliJ IDEA

实验内容

1、 写一个程序来模拟网桥功能。
模拟实现网桥的转发功能,以从文件中读取帧模拟网桥从网络中收到一帧,即从两个文件中读入一系列帧,从第一个文件中读入一帧然后从第二个文件中再读入一帧,如此下去。对每一帧,显示网桥是否会转发,及显示转发表内容。
分析:用程序模拟网桥功能,可以假定用两个文件分别代表两个网段上的网络帧数据。而两个文件中的数据应具有帧的特征,即有目的地址,源地址和帧内数据。程序交替读入帧的数据,就相当于网桥从网段中得到帧数据。
对于网桥来说,能否转发帧在于把接收到的帧与网桥中的转发表相比较。判断目的地址后才决定是否转发。由此可见转发的关键在于构造转发表。这里转发表可通过动态生成。

2、 编写一个计算机程序用来计算一个文件的16位效验和。最快速的方法是用一个32位的整数来存放这个和。记住要处理进位(例如,超过16位的那些位),把它们加到效验和中。
要求:

  1. 以命令行形式运行:check_sum infile。其中check_sum为程序名,infile为输入数据文件名。
  2. 输出:数据文件的效验和
    附:效验和(checksum)
    参见RFC1071 - Computing the Internet checksum
    原理:
     把要发送的数据看成16比特的二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。
     例子:16位效验和计算,下图表明一个小的字符串的16位效验和的计算。
    为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验和。如果效验和大于16位,那么把进位一起加到最后的效验和中。
    在这里插入图片描述

实验步骤、记录和结果

1、 写一个程序来模拟网桥功能。
模拟实现网桥的转发功能,以从文件中读取帧模拟网桥从网络中收到一帧,即从两个文件中读入一系列帧,从第一个文件中读入一帧然后从第二个文件中再读入一帧,如此下去。对每一帧,显示网桥是否会转发,及显示转发表内容。
分析:用程序模拟网桥功能,可以假定用两个文件分别代表两个网段上的网络帧数据。而两个文件中的数据应具有帧的特征,即有目的地址,源地址和帧内数据。程序交替读入帧的数据,就相当于网桥从网段中得到帧数据。
对于网桥来说,能否转发帧在于把接收到的帧与网桥中的转发表相比较。判断目的地址后才决定是否转发。由此可见转发的关键在于构造转发表。这里转发表可通过动态生成。
为了更加深入的了解网桥的功能,本实验设计了一个四个接口的网桥,连在网桥上面的主机数目为12。其拓扑结构如下如图:
在这里插入图片描述
程序分析:

模拟网桥实验首先设置一个List存放在每个接口发出的帧的组合,再设计一个Interface类表示每个接口的接口号和链接在这个接口的主机号(为了方便表示,接口号用阿拉伯数字表示,主机号用大写英文字母表示)。然后又设置一个List存放这网桥的接口。然后遍历要发送的帧,读进来的帧进行分析, 先判别源地址是否存在于网桥转发表中, 若果在则进入第一个循环模块, 再判别目标地址是否在转发表中,最后输出数据由哪个接口转发。如果源地址不在转发表中, 要把这个源地址和所对应接口写入网桥的转发表中, 在进行其他判别。由此可见转发的关键在于构造转发表,这里转发表是动态生成的。

程序流程图如下图:

在这里插入图片描述

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Bridge {
   

    public static void main(String[] args) {
   
        List<String> str = new ArrayList<String>(); //存放所有传输的帧
        List<Interface> str1 = new ArrayList<Interface>();  //记录转发表的内容
        creatTxtFile();  //创建txt文件,并且写入数据
        readTxtFile(str); //读取txt文件
        System.out.println("开始监听:");
        for (int i = 0; i < str.size(); i++) {
   
            String[] str2 = str.get(i).split(" ");
            str1.add(new Interface(i));

            for (int j = 0; j < str2.length; j++) {
   
                //检查网桥是否记录源地址
                if (!str1.get(i).host.contains(String.valueOf(str2[j].charAt(0)))) {
    //检查接口是否记录这个主机
                    str1.get(i).host.add(str2[j].charAt(0) + "");
                }
                //检查网桥是否记录目的地址
                boolean isExist = false;
                int k;
                for (k = 0; k < str1.size(); k++) {
   
                    if 
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一共包括10个以上的聊天程序版本!绝对物有所值! 为感谢大家长期的支持,我将下载所需的资源分下调为2。网络聊天程序设计(可选)  实验要求 1、分析典型网络聊天应用软件(如QQ、MSN等)的实现原理,模拟设计一套网络聊天应用程序,必须实现以下功能: ①按照C/S结构分别设计服务端程序和客户端程序; ②服务端通过图形用户界面实现对服务器的控制,负责维护用户帐户和用户群,并维护用户信息、维持客户端之间的端对端通信和群聊通信、适时维护用户在线信息,并能够发送广播消息。 2、增加尽可能多的功能,用户界面友好,操作简便,代码设计遵从程序设计规范,易读性强,对关键过程和代码进行标注说明。 3、程序设计过程遵从软件工程规范,有需求分析、系统设计和详细设计过程,有相应的规范化说明文档。  实验提示 1、客户端之间的通信是通过服务器进行转发的,对于两个客户端,服务器需要创建两个套接字分别维持与客户端之间的连接。当客户端需要向另一个客户发送消息时,它首先将消息发送到服务器,由服务器根据目标用户帐户转发到目标主机。 2、群聊是采用多播技术实现的,也可以采用单播技术实现,但是服务器开销会增加。具体说来,若采用组播技术,当服务端收到来自一个客户端的消息后,向预先分配的该组组播地址转发该消息。若采用单播技术,服务端需要向该组内的所有客户端一一转发该消息。 3、广播消息通过广播方式发送由服务端创建的消息。 4、服务端根据客户的连接和断开情况,实时向其它客户端发送用户在线信息。 实验题目二:自选网络通信程序设计(可选)  实验要求 可以自选与网络通信相关的设计题目,要求如下: 1、在确定实验题目、设计内容以及设计功能指标要求后,向实验指导教师提交书面申请,由实验指导教师根据所选实验题目的难度和工作量确定立题后方能开始实验。 2、选择的实验题目必须具有一定综合性,并能够利用网络通信原理加以解决,同时需要具备一定的工作量。 3、设计的结果要求用户界面友好,操作简便,代码设计遵从程序设计规范,易读性强,对关键过程和代码进行标注说明。 4、程序设计过程遵从软件工程规范,有需求分析、系统设计和详细设计过程,有相应的规范化说明文档。 5、严禁抄袭别人成果,但可以部分借鉴。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值