1.什么是网络编程?
网络编程:指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。
要想进行网络编程,首先要学会操作系统给我们提供的一组 API,我们通过这些 API 才能进行网络编程。
这个 API 可以认为是应用层和传输层之间交互的路径。(我们只需要知道用户输入的是什么,然后调系统的 API 就可以完成网络通信)
传输层提供的两个主要网络协议是 TCP 和 UDP:这两个协议的原理差距很大,因此通过这两个协议进行网络编程的时候就存在一些差别。故系统提供了两组 API 供我们使用。
首先我们先了解一下两个协议大的方向的区别在哪里,具体细节我留到后续内容讲解。
2.TCP 和 UDP 的区别
2.1.TCP 是有连接的,UDP 是无连接的(这里的连接是抽象的概念)
这里连接的本质上是建立连接的双方各自保留对方的信息,两个计算机建立连接,就是彼此保留了对方的关键信息。
TCP 想要通信,就需要先建立连接(保存对方信息)做完之后才能进行通信。
(如果 A 想要和 B 建立连接,B 拒绝了,那么通信就没办法完成)
UDP 想要通信,就直接发送数据就可以了,不管你是否同意,UDP 也不会保留对方的信息。
(UDP 什么也不知道,但是我们程序员要知道,UDP 自己不保存,但是我们发送数据肯定还是要把对方的 IP 和端口号都发送过去)
2.2.TCP 是可靠传输,UDP 是不可靠传输
在网络通信中,A 会给 B 发送一个消息,B 不可能 100% 收到。
但是可靠传输就是就算 A 的信息没有传输过去,A 能知道,进一步在发送失败的时候采取一定的措施(就像微信发送消息没发送过去有一个红感叹号)。
TCP 内置了可靠传输,UDP 没有(后面我会详细讲解)。但是你可靠传输考虑的东西就太多了,效率就要牺牲,但是我们还是通过一些方法能补救回来一点。
2.3.TCP 是面向字节流的,UDP 是面向数据报的
TCP 和文件操作一样都是以字节为单位进行传输。
UDP 是按照数据报(DatagramPacket)为单位进行传输(只能是数据报的整数倍)。
2.4.TCP 和 UDP 都是全双工的
3.UDP 的 Socket API 如何进行使用?
首先关于 InetAddress 这个类
try {
InetAddress address = InetAddress.getByName("www.google.com");
System.out.println("IP Address: " + address.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
结果:IP Address: 142.250.190.36
InetAddress:用于表示 IP 地址的类,支持 IPv4 和 IPv6。getByName():用于解析主机名或 IP 字符串,返回 InetAddress 对象。IP 地址作为参数:在网络编程中,IP 地址是定位目标设备的关键,因此需要作为参数传入相关方法(这里就需要把 IP 地址传入 getByName() 方法里面进行解析域名)。


