JAVA网络基础

1 网络基础简介

1.1 两台计算机通信

两台计算机需要通过网络进行通信,需要满足三个必备条件:IP地址(所处位置和身份)、协议(共同的语言)和端口号

1.1.1 TCP/IP协议

  • TCP/IP是目前世界上应用最为广泛的协议
    • 是以TCP/IP为基础的不同层次上多个协议的集合
    • 也称为:TCP/IP协议族 或 TCP/IP协议栈
  • TCP:Transmission Control Protocol—传输控制协议
  • IP:Internet Protocol—互联网协议

  • 如下图,TCP/IP模型:
    这里写图片描述

  • IP地址端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础

    • IP地址是为实现网络中不同计算机之间的通信,每台计算机必须有一个唯一的标识,在IPv4中是32位的2进制编码
    • 端口号用于区分不同的应用程序,端口号的范围是0~65535,其中0~1023为系统所保留,自己使用建议使用1023之后的端口号(http:80,ftp:21,telnet:23)

1.1.2 Java中的网络支持

针对网络通信的不同层次,Java提供的网络功能的四大类:
- InetAddress:用于标识网络上的硬件资源
- URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
- Sockets:使用TCP协议实现网络通信的Socket相关的类
- Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信

2 Java中InetAddress类的应用

InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址。
InetAddress类没有提供构造方法,获取InetAddress类可以通过以下几个构造方法:

返回类型方法名说明
static InetAddressgetLocalHost()返回本地主机
static InetAddressgetByName(String host)在给定主机名的情况下确定主机的 IP 地址
static InetAddressgetByAddress(String host,byte[] addr)根据提供的主机名和 IP 地址创建InetAddress
static InetAddressgetByAddress(byte[] addr)在给定原始IP地址的情况下,返回InetAddress对象
static InetAddressgetAllByName(String host)在给定主机名的情况下,根据系统上配置的名称服务返回其IP地址所组成的数组
  • 获取本机的InetAdress实例,并通过getHostName()getHostAddress()方法获取计算机名称IP地址,通过getAddress()获取IP地址的字节数组形式,同时直接输出InetAddress对象将得到”主机名\IP地址“形式:

    InetAddress address = InetAddress.getLocalHost();
    System.out.println("本地计算机名:"+address.getHostName());
    System.out.println("IP地址:"+address.getHostAddress());
    System.out.println("IP地址的字节数组形式:"+Arrays.toString(address.getAddress()));
    System.out.println("主机名/IP地址:"+address);
  • 根据机器名称获取InetAddress实例:

    InetAddress address2 = InetAddress.getByName("DESKTOP-TN9JAVS");
  • 根据IP地址获取InetAddress实例:

    byte[] byte_id = {(byte) 192,(byte) 168,1,(byte) 169};
    InetAddress address2 = InetAddress.getByName(byte_id);

3 Java中的URL应用

  • URL(Uniform Resource Locator,统一资源定位符)表示Internet上某一资源的地址;
  • URL由两部分组成:协议名称资源名称,中间用冒号隔开;
  • java.net包中提供了URL类来表示URL。

3.1 创建URL实例

构造方法说明
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实例,并通过该实例创建一个新的URL实例:

//创建一个URL实例
URL CSDN = new URL("http://www.csdn.net/");
//根据已存在的URL创建新的URL,?后表示参数,#表示锚点
URL url = new URL(CSDN,"index.html?hostname=jack#practice");
System.out.println("此URL的协议名称:"+url.getProtocol());
System.out.println("此URL的主机名(如果适用):"+url.getHost());
//如果未指定端口号,则使用默认的端口号,此时getPort()方法均返回-1,表示使用的是默认值
System.out.println("此URL的端口号:"+url.getPort());
System.out.println("此URL的文件名:"+url.getFile());
System.out.println("此URL的锚点(也称为“引用”):"+url.getRef());
System.out.println("获取此URL的查询部分:"+url.getQuery());

这里写图片描述

3.2 使用URL获取网页资源

  • 通过URL对象的openStream()方法得到指定资源的输入流,将字节输入流转换为字符输入流,为字符输入流添加缓冲提高效率:

    URL url = new URL("http://www.baidu.com");
    InputStream is = url.openStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
  • 通过流可以读取、访问网络上的数据,用BufferedReader的readline()方法按行读入:

    String data = br.readline();

备注:
1. 注意抛出的异常
2. 注意关闭字节\字符流

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值