计算机网络——Socket实验1

目录

一、实验目的

二、实验内容

三、实验环境

四、实验步骤

1 InetAddress类

1.1 InetAddress类的简介

1.2 获取本地机的名称和IP地址

1.3 获取CSDN的全部IP地址

2 URL类与URLConnection类

2.1 URL类的简介

2.2 URLConnection类的简介

2.3使用URL类下载一张图片

2.4使用URL类下载深大首页,并统计下载得到网页文件的大小

附录


一、实验目的

学习网络编程基本概念、InetAddress的应用、URL的应用、URLConnection的应用

二、实验内容

InetAddress类和URLConnection类的使用

三、实验环境

  1. 使用Windows操作系统;Internet连接
  2. Eclipse+Java开发环境

四、实验步骤

1 InetAddress类

1.1 InetAddress类的简介

Internet上的主机有两种表示地址的方式:域名和IP地址。有时候需要通过域名来查找它对应的IP地址,有时候又需要通过IP地址来查找主机名。这时候可以利用java.net包中的InetAddress类来完成任务。

InetAddress类是IP地址封装类,同时它也是一个比较奇怪的类,它没有公共的构造方法,只能利用该类的一些静态方法来获取对象实例,然后再通过这些对象实例来对IP地址或主机名进行处理。该类常用的一些静态方法有如下。

  • public static InetAddress getByName(String hostname):根据给定的主机名创建一个InetAddress对象,可用来查找该主机的IP地址
  • public static InetAddress getByAddress (byte[] addr):根据给定的IP地址创建一个InetAddress对象,可用来查找该IP对应的主机名
  • public static getHostAddress():获取IP地址
  • public static getHostName():获取主机名

此外,该类还有一些其他常用的方法,具体如下:

  • String getCanonicalHostName():获取此 IP 地址的完全限定域名
  • String getHostAddress():返回 IP 地址字符串(以文本表现形式)
  • String getHostName():获取此 IP 地址的主机名
  • Int hashCode():返回此 IP 地址的哈希码
  • Boolean isAnyLocalAddress():检查 InetAddress是否是通配符地址的实用例行程序
  • boolean isLinkLocalAddress():检查 InetAddress是否是链接本地地址的实用例行程序
  • boolean isLoopbackAddress():检查 InetAddress是否是回送地址的实用例行程序
  • Boolean isMCGlobal():检查多播地址是否具有全局域的实用例行程序
  • Boolean isMCLinkLocal():检查多播地址是否具有链接范围的实用例行程序
  • Boolean isMCNodeLocal():检查多播地址是否具有节点范围的实用例行程序
  • Boolean isMCOrgLocal():检查多播地址是否具有组织范围的实用例行程序
  • Boolean isMCSiteLocal():检查多播地址是否具有站点范围的实用例行程序
  • Boolean isMulticastAddress():检查 InetAddress 是否是 IP 多播地址的实用例行程序
  • Boolean isReachable(int timeout):测试是否可以达到该地址
  • Boolean isReachable(NetworkInterface netif, int ttl, int timeout):测试是否可以达到该地址
  • Boolean isSiteLocalAddress():检查 InetAddress 是否是站点本地地址的实用例行程序
  • String toString():将此 IP 地址转换为 String

1.2 获取本地机的名称和IP地址

由于我们已经学习了InetAddress类的一些方法,在此,我们可以直接利用getLocalHost方法获取本地主机名和本地地址。

1 获取本机名与地址的代码

如图 1,第一行引入所需的java.net包。在主函数内,先定义InetAddress类,并调用getLocalHost方法获取对应的地址,最后将结果进行输出即可。

2 获取本机名与地址的输出

       如图 2,即为输出的结果,我们电脑的主机名为“YunhaoAlienware”,地址为192.168.85.1

1.3 获取CSDN的全部IP地址

由于我们已经学习了InetAddress类的一些方法,在此,我们可以直接利用getAllByName方法,将所有IP地址存入一个列表并进行输出。

3 获取CSDN的所有IP地址代码

如图 3,第一行引入所需的java.net包。在主函数内,先定义InetAddress类的数组,并调用getAllByName方法获取所有的IP地址并存入数组,最后将结果进行输出即可。

4 获取CSDN的所有IP地址的输出

如图 4,即为输出的结果,CSDN只有一个IP地址,为39.106.226.142。

2 URL类与URLConnection类

2.1 URL类的简介

URL 类代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。通常,URL 可分成几个部分。

如https://www1.szu.edu.cn/board/view.asp,该 URL 示例指示使用的协议为 https (超文本传输安全协议)并且该信息驻留在一台名为www1.szu.edu.cn 的主机上。主机上的信息名称为/board/view.asp。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径部分。

此外,URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http 协议的默认端口为 80。

       URL类有如下6种构造方法:

  • URL(String spec):根据 String 表示形式创建 URL 对象
  • URL(String protocol, String host, int port, String file):根据指定 protocol、host、port 号和 file 创建 URL 对象
  • URL(String protocol, String host, int port, String file, URLStreamHandler handler):根据指定的 protocol、host、port 号、file 和 handler 创建 URL 对象
  • URL(String protocol, String host, String file):根据指定的 protocol 名称、host 名称和 file 名称创建 URL
  • URL(URL context, String spec):通过在指定的上下文中对给定的 spec 进行解析创建 URL
  • URL(URL context, String spec, URLStreamHandler handler):通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL

此外,URL类还有一些其他常用的方法,具体如下:

  • boolean equals(Object obj):比较此 URL 是否等于另一个对象。
  • String getAuthority():获取此 URL 的授权部分。
  • Object getContent():获取此 URL 的内容。
  • Object getContent(Class[] classes):获取此 URL 的内容。
  • int getDefaultPort():获取与此 URL 关联协议的默认端口号。
  • String getFile():获取此 URL 的文件名。
  • String getHost():获取此 URL 的主机名(如果适用)。
  • String getPath():获取此 URL 的路径部分。
  • int getPort():获取此 URL 的端口号。
  • String getProtocol():获取此 URL 的协议名称。
  • String getQuery():获取此 URL 的查询部分。
  • String getRef():获取此 URL 的锚点(也称为“引用”)。
  • String getUserInfo():获取此 URL 的 userInfo 部分。
  • int hashCode():创建一个适合哈希表索引的整数。
  • URLConnection openConnection():返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
  • URLConnection openConnection(Proxy proxy):与 openConnection() 类似,所不同是连接通过指定的代理建立;不支持代理方式的协议处理程序将忽略该代理参数并建立正常的连接。
  • InputStream openStream():打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
  • boolean sameFile(URL other):比较两个 URL,不包括片段部分。
  • protected void set(String protocol, String host, int port, String file, String ref):设置 URL 的字段。
  • protected void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref):设置 URL 的指定的 8 个字段。
  • static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac):设置应用程序的 URLStreamHandlerFactory。
  • String toExternalForm():构造此 URL 的字符串表示形式。
  • String toString():构造此 URL 的字符串表示形式。
  • URI toURI():返回与此 URL 等效的 URI。

2.2 URLConnection类的简介

URLConnection是一个抽象类,表示指向URL指定资源的活动连接。URL类中的openConnection()方法可生成一个URLConnection对象,URLConnection类的实例可用于读取和写入此URL引用的资源。在网络编程工作中,JAVA的URLConnection是一个常用的类,它提供了一个非常方便的接口,只要提供需要连接的主机的URL地址,使用URL类的openConnection()方法就可以得到一个HttpURLConnection的对象,其中HttpURLConnection类是URLConnection类的子类,然后在此基础上分析HTTP内容,完成相关任务。在这种方式下,使用者不必考虑底层的实现细节,避免了烦琐的Socket类的代码编写,因此比较常用

       URLConnection类常用的构造方法只有一个,即通过URL获取对应的URLConnection类:

  • protected URLConnection(URL url)

在建立了远程对象后,则会经常使用如下方法来获取对应的值:

  • getContent: 获取此 URL 连接的内容。
  • getHeaderField: 返回指定的头字段的值。如果调用的连接多次使用不同的值设置了头字段,则只返回最后一次设置的值。
  • getInputStream: 返回从此打开的连接读取的输入流。 在读取返回的输入流时,如果在数据可供读取之前达到读入超时时间,则会抛出 SocketTimeoutException。
  • getOutputStream: 返回写入到此连接的输出流。

2.3使用URL类下载一张图片

URL类经常用于下载网络资源,URL通过构造函数(构造函数为URL地址)可以得到一个对象,该对象的openStream()方法可以得到InputStream对象,得到InputStream就可以把网站上的资源下载下来了。下面是一个实例,使用URL类下载某个网站上的一张图片并保存到本地。

5 使用URL下载图片的代码

       如图 5,前两行引入所需的包,第6,7行借助URL类获取输入流,并在第9-13行利用循环将输入流存入本地文件中。

6 使用URL下载的图片

       如图 6,即为使用URL下载的图片。

2.4使用URL类下载深大首页,并统计下载得到网页文件的大小

由于我们已经学习了URL类的一些方法,在此,我们可以直接利用URL类建立连接,并通过结合URLConnection类的方法,借助流来获取深大首页的文件。

7 URL类下载深大首页代码

       如图 7,首先前三行引入所需的包。第8,9行借助URL类和URLConnection类建立连接,第11行使用getInputStream方法获取对应的输入流,第12行使用文件流创建文件。然后第13-17行利用while循环将内容读入到文件中。最后19-20行借助文件获取对应html文件的大小。

8 获取的html文件的大小

9 获取的HTML文件

       如图 9,获取的深大主页的文件如图所示;如图 8,获取的html文件的大小为92.9kb。

附录

代码如下:

import java.io.*;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;

public class Main {
    public static void main(String[] args) throws IOException {
        //使用InetAddress类的方法获取本地机的名称和IP地址
        InetAddress address = InetAddress.getLocalHost();
        System.out.println("Localhost:" + address);

        //使用InetAddress类的方法获取网站www.csdn.net的IP地址,如果存在多个IP地址,要求全部返回
        InetAddress[] address_Arr = InetAddress.getAllByName("www.csdn.net");
        System.out.println("All the IP address about CSDN:");
        for (InetAddress inetAddress : address_Arr) {
            System.out.println(inetAddress.toString());
        }
        // 使用URL类下载深圳大学首页http://www.szu.edu.cn,并统计下载得到网页文件的大小
        URL url = new URL("https://www.szu.edu.cn");
        URLConnection url_connection = url.openConnection();

        InputStream in = url_connection.getInputStream();
        FileOutputStream fout = new FileOutputStream("szu_index.html");
        int a = 0;
        while (a > -1) {
            a = in.read();
            fout.write(a);
        }
        fout.close();
        File file = new File("szu_index.html");
        System.out.println("File size:" + file.length() / 1024.00 + "k");
    }
}

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
华中科技大学计算机学院 《计算机网络实验报告 实验名称 网络组建与实施及Socket编程 团队成员: "姓 名 "班 级 "学 号 "贡献百分比 "得 分 " " " " " " " " " " " " " 注:团队成员贡献百分比之和为1 教师评语: 实验一—— 网络组建与实施 1. 环境 操作系统:WINDOWS7 (32位 旗舰版) 工具:Boson Netsim仿真软件(版本号5.31) 2. 实验目的 1. 了解IP协议,网络层协议和数据链路层协议的工作原理机以及工作机制 2. 掌握IP地址的规划方法 3. 掌握路由协议的配置方法 4. 掌握路由器以及二/三层交换机的配置方法 5. 了解VLAN的划分原理 6. 掌握访问控制的配制方法 3. 实验内容及步骤(包括主要流程和说明) 实验所用拓扑图如下: 图一: 图二 第一项试验——组网试验 1. 设置PC1、PC2的ip分别为192.168.0.1、192.168.0.2,子网掩码为255.255.255.0,网关 为192.168.0.254;设置PC3~PC8的ip分别为192.168.1.1~192.168.1.6,子网掩码为255 .255.255.0,网关为192.168.1.254;设置Router A的端口地址为ether 0 192.168.0.254,ether 1 192.168.1.254。测试结果为各PC机之间可以自由通信,部分结果如图1-1所示。 图1-1 (a) 图1-1 (b) 2. 将PC4、PC6、PC8的ip地址改为192.168.2.2、192.168.2.4、192.168.2.6,网关改为19 2.168.2.254,其他设置不变。PC4,PC6,PC8之间能互相通信,不能发送数据到其他PC ;其他PC之间可以互相通信;PC1,PC2不能发送数据给PC4,PC6,PC8,而PC3,PC5,PC7 可以发送数据给PC4,PC6,PC8。部分结果如图1- 2所示。结果分析:路由器ip为PC3,PC5,PC7的默认网关,PC3,PC5,PC7可以通过路由器访 问其他PC,也可以被PC1,PC2访问,而PC4,PC6,PC8无法通过路由器访问其他子网段P C 图1-2 (a) PC3的ping结果 图1-2 (b) PC1的ping结果 图1-2(c) PC4的ping结果 第二项试验——路由配置试验 1.首先按如下要求配置各PC的IP地址 " "IP地址 "子网掩码 "默认网关 " "PC1 "192.168.0.1 "255.255.255.0 "192.168.0.254 " "PC2 "192.168.1.1 "255.255.255.0 "192.168.1.254 " "PC3 "192.168.2.1 "255.255.255.0 "192.168.2.254 " "PC4 "192.168.3.1 "255.255.255.0 "192.168.3.254 " 2.路由器配置如下(Router A配置如下,其它路由器配置类似) 3.RIP协议配置(Router A配置如下,其它路由器配置类似) 思考题 如果不设置时钟频率,各PC无法相互访问 OSPF协议配置(Router A配置如下,其它路由器配置类似) 结果是各PC能相互访问,部分结果见图2-1。 图3-1 (a) PC2的ping结果 第三项试验——VLAN划分试验 在switch2,switch3,switch4上设置一个名为class的VTP域,并创建一个名为Class1的 VLAN2以及名为Class2的VLAN3. 将switch2,switch3,switch4的各个端口分配到新创建的相应VLAN中。(switch2的配置 如下,switch3,switch4的配置与之类似,端口为fa0/3和fa0/4) 配置switch2,switch3,switch4之间的trunk链路。(switch2的配置如下,switch3,s witch4的配置与之类似,端口为fa0/1和fa0/2) 此时,PC3,PC5,PC7处于VLAN2,PC4,PC6,PC8处于VLAN3,VLAN2和VLAN3内部PC可以互 相访问,但VLAN之间无法访问。部分结果见图3-1。 图3-1 (a) PC3的ping结果 图3-1 (b) PC4的ping结果 第四项试验——访问控制配置试验 对路由器Router A进行配置,使得PC1无法访问其它PC,也不能被其它PC访问 部分结果见图4-1。 图4-1 (a) PC1的ping结果 图4-1 (b) PC2的ping结果 实验二—— 支持多线程处理的web服务服务端软件 1. 环境 操作系统:WINDOWS 7 (32位 旗舰版)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上山打老虎D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值