网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection

发布于:2025-03-17 ⋅ 阅读:(20) ⋅ 点赞:(0)

DAY12.1 Java核心基础

网络编程

在互联网时代,网络在生活中处处可见,javaWeb占据了很大一部分

那如何实现javaWeb编程呢?

Web编程就是运行在同一个网络下面的终端,使得它们之间可以进行数据传输

计算机网络基本知识

计算机网络是通过硬件设施,传输媒介把不同物理地址上的计算机网络进行连接,形成一个资源共享和数据传输的网络系统

两台终端进行连接需要遵守规定的网络协议

  • 语法:数据信息的结构
  • 语义:描述请求、动作、响应
  • 同步:动作的实现顺序

网络通信协议包括TCP/IP协议,IPX/SPX协议,NetBEUI协议,最常用的是TCP/IP协议

TCP/IP协议的分层思想

分层的优点:

  • 维护性扩展性好
  • 有利于系统的优化

分层思想好处是只需要关注自己的业务,不需要关注其它层的业务,把传递过来的数据处理传递给下一层即可

比如java代码的运行,它是运行在JVM虚拟机的,所以可以在不同的操作系统运行,做到了代码的跨平台性

TCP/IP协议分为 4 层:

  • 应用层:整个体系结构中的顶层,通过应用之间的数据交互完成网络应用
  • 传输层:为两台终端的数据交互提供数据传输服务
  • 网络层:也叫 IP 层,负责为网络不同的终端提供通信服务
  • 网络接口层:包括数据链路层物理层,数据链路层:为数据传输提供链路协议,物理层指的是光纤、电缆、电磁波等真实存在的物理媒介,这些媒介可以传送网络信号

A发消息给B的数据传输路线图:

image-20250316144220802

IP和端口

IP

IP地址:互联网中每个终端的唯一标识,网路请求可以根据这个找到具体的计算机

IP地址 = 网络地址,主机地址,网络地址的作用是找到主机所在的网络,主机地址是找到网络中的主机

IP地址分为5类,各类地址的IP数量不同

分类 范围
A类 1.0.0.1~126.255.255.254
B类 128.0.0.1~191.255.255.254
C类 192.0.0.1~233.255.255.254
D类 224.0.0.1~239.255.255.254
E类 240.0.0.1~255.255.255.254

实际开发不用记住本机的IP地址

可以用127.0.0.1或者localhost表示本机地址

Java 中有专门的类来描述 IP 地址,这个类是 java.net.InetAddress

方法 描述
public static InetAddress getLocalHost() 获取本地主机的 InetAddress 对象
public static InetAddress getByName(String host) 通过主机名称创建 InetAddress 对象
public String getName() 获取主机名称
public String getHostAddress() 获取主机 IP 地址
pubilc static InetAddress getByAddress(String host,byte[] addr) 通过主机名称和 IP 地址创建 InetAddress 对象
public static InetAddress getByAddress(byte[] addr) 通过 IP 地址创建 InetAddress 对象

端口

IP好比酒店的地址,那么端口就是房间号,IP地址需要结合端口来一起使用,不然找不到具体的应用

比如微信和QQ,他们两个软件运行在电脑的不同端口上面

还有我们常见的软件的默认端口

MySql:localhost:3306

Tomcat:localhost:8080

URL 和 URLConnection

URI(Uniform Resource Identifier)

网络资源是网络中真实存在的实体,比如文字、音频、图片、视频…

如何通过程序获取网络资源呢?

我们可以使用URI

URI:统一资源定位符,可以指向目标实体

Java.net包里面封装了一个类 URI ,使用 URI 的实例化对象就可以管理网络资源

public static void main(String[] args) {
    URI uri = URI.create("http://localhost:8080/user/login");
    System.out.println(uri);
    System.out.println(uri.getHost());
    System.out.println(uri.getPort());
    System.out.println(uri.getPath());
}

URL(Uniform Resource Locator)

URL:统一资源位置,在 URI 的基础上进行了扩充,在定位资源的同时还提供了对应的网络地址,Java 也对 URL 进行了封装

方法 描述
public URL(String protocol,String host,int port,String file) 根据协议、IP地址、端口号、资源名称获取URL对象
public final InputStream openStream() 获取输入流对象
public static void main(String[] args) throws Exception {
    URL url = new URL("http", "127.0.0.1", 80, "/index.html");
    System.out.println(url.getPath());
    System.out.println(url.getHost());
    System.out.println(url.getPort());
    System.out.println(url.getProtocol());
    InputStream inputStream = url.openStream();
    InputStreamReader reader = new InputStreamReader(inputStream);
    BufferedReader bufferedReader = new BufferedReader(reader);
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
}

URLConnection

URLConnection 用来描述 URL 指定资源的连接,是一个抽象类,常用的子类有 HttpURLConnection,URLConnection 底层是通过 HTTP 协议来处理的,它定义了访问远程网络资源的方法,通过 URLConnection 可以获取到 URL 资源的相关信息

方法 描述
public int getContentLength() 返回资源的长度,返回值为 int 类型
public long getContentLengthLong() 返回资源的长度,返回值为 long 类型
public String getContentType() 返回资源的类型
public abstract void connect() 判断连接的打开或关闭状态
public InputStream getInputStream() 获取输入流对象
URLConnection urlConnection = new URL("https://www.baidu.com").openConnection();
// 获取内容长度
System.out.println(urlConnection.getContentLength());
// 获取内容长度Long类型
System.out.println(urlConnection.getContentLengthLong());
// 获取类型
System.out.println(urlConnection.getContentType());
// 获取编码
System.out.println(urlConnection.getContentEncoding());
// 获取URL
System.out.println(urlConnection.getURL());
urlConnection.connect();
// 获取输入流
InputStream inputStream = urlConnection.getInputStream();
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
}

TCP协议

TCP 协议是面向连接的运算层协议,比较复杂,应用程序在使用TCP协议之前必须建立连接,才能传输数据,数据传输完毕之后需要释放连接

就好比现实生活中的打电话,首先确保电话打通了才能进行通信,如果没有打通则阻塞,需要等待打通才能对话

TCP优缺点:

  • 优点:安全可靠,数据不会丢失,并且数据是按照先后顺序依次到达
  • 缺点:速度慢,效率低,常用于对于业务安全要求较高的场景

Java中如何使用 TCP 呢?

java中通过Socket类来建立TCP连接,使用这个类可以在服务端和客户端建立一个可靠的连接

Socket表示客户端,ServerSocket表示服务端

它们都在java.net包中

在服务端创建ServerSocket对象,通过对象的accept()方法可以接收到若干个表示客户端的Socket对象

代码示例 我们请看下一篇


网站公告

今日签到

点亮在社区的每一天
去签到