网络的相关概念
概念:两台设备通过网络实现数据传输
网络通信:将数据从一台设备传输到另一台设备
在Java中,提供了Java.net的包,包下有一系列的类和接口,用于实现网络编程,以完成网络通信
主机H1和主机H2就是两台不同的设备,他们通过各种网络连接到不同路由器,进而由路由器转接进行数据传递
网络
概念:两台或者多台设备通过一定的物理设备进行连接,用来进行数据传输的,叫做网络
网络从小到大分为:局域网,城域网,广域网
局域网:覆盖范围大多为一个教室,一个办公室。平常我们在教室进行和老师的连接就是局域网在发挥作用
城域网:覆盖范围大多为一个城市,或者是更大的范围,电信,移动和其他运营场所的数据流量基本上用的城域网
广域网:可以覆盖整个世界,因特网就是典型的代表
IP地址
可以把全世界计算机理解为一个计算机村,IP地址理解为每个计算机的门牌,在网络编程中想要传给这个计算机数据,就要知道计算机在计算机村中的地址,IP地址就是这样发挥作用的。物理地址是MAC地址
我们可以打开windows中cmd窗口查看自己的ip地址
指令:ipconfig
大家可以看到,IP地址分为IPv6和IPv4
IPv4:以十进制来展示地址为 xx.xx.xx.xx 在上个图中,博主IPv4地址为10.7.50.64
因为IPv4是十进制表示的,而十进制的范围为0-255,所以用IPv4可以表示的计算机并不算多
补充一下,IPv4地址分类
类级越高,表示该计算机可以分配在该地址下的计算机越多
特殊的 127.0.0.1 表示本机地址
域名
概念:将IP地址映射成一个大家可以接受的形式,通过HTTP协议映射。
拿百度举例子
可以看到,这时百度的域名为www.baidu.com IP地址为183.2.172.185
www.baidu.com就是由183.2.172.185遵循HTTP映射而来
值得一提的是,IP地址是会变化的,隔一段时间就会改变一次
端口
计算机是完成各种程序的工具,而怎么开始使用工具,这时候就需要不同的端口来让我们拿到这个想要拿到的工具。
每台计算机有65535个端口,其中前1024个端口已经被占用,比如ssh 22,ftp21,smtp 25,http 80,这些都是已经设定好的,我们已经不能接入自己的业务将该端口进行使用
常见的网络编程端口号:
tomcat:8080
mysql:3306
oracle:1521
sqlserver:1433
网络通信协议
TCP和UDP
TCP:传输控制协议
1. 使用TCP协议前,需要建立TCP连接
2. TCP在开始前要进行“三次握手”,以保证传输数据的可靠性
3. TCP进行通信的两个应用进程为 客户端 服务端
4. 因为“三次握手”确定传输的可靠性之后,可以进行传输大量数据
5. “三次握手”导致传输效率很低,使用完毕后需要关闭协议
解释“三次握手”
客户端发出一条短信:嘿,我要传输数据了,你在吗
服务器端:我在
客户端:准备接收数据
这样就保证了服务端可以完整的接受数据,进而传输大量数据也不成问题
UDP:用户数据协议
1. 将数据,源,目的封装成包,不需要建立连接
2. 数据包大小都在64k以内,不适合进行数据大量传输
3. 无需连接,安全性不可靠
4. 相较于TCP,UDP不需要“三次握手”,发送数据结束时也不需要释放资源,速度更快
解释UDP的传输方式
类似于学校发通知,学校并不知道学生是否会看,也不知道学生是否在,但就是发给学生了,可以说是单方面的。所以这样传输也很快
InetAddress类
基础相关方法
1.获取本机InetAddress对象:getLocalHost
可以看到,在新建了一个对象之后,得到了我们主机的名称和IP地址
2. 根据指定的主机名/域名获得IP地址对象 getByName()
可以看到,我们在getByName()填入的参数为我们的主机名,返回的是主机名和IP地址
3. 根据IP地址来获得主机名
在使用getHostName之输出我们电脑的主机名
具体应用案例如下
package api;
import org.junit.jupiter.api.Test;
import java.net.InetAddress;
import java.net.UnknownHostException;
//演示InetAddress的使用
public class API_ {
public static void main(String[] args) throws UnknownHostException {
//1.获取本机的InetAddress对象
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);//DESKTOP-2298S61/10.7.50.64
//2.根据主机名获取InetAddress对象
InetAddress byName = InetAddress.getByName("DESKTOP-2298S61");
System.out.println(byName);//DESKTOP-2298S61/10.7.50.64
//3.根据域名返回一个InetAddress对象,以www.baidu.com为例
InetAddress byName1 = InetAddress.getByName("www.baidu.com");
System.out.println(byName1);//www.baidu.com/183.2.172.42
//4.根据InetAddress对象反向获取地址
System.out.println(byName1.getHostAddress());//www.baidu.com IP地址
//5.根据InetAddress对象获取主机名/域名
System.out.println(localHost.getHostName());//显示的是这台电脑的名称 DESKTOP-2298S61
}
}
Socket
介绍:Socket俗称为套接字,在网络编程中广泛应用,以至于以成为网络编程的一套标准
作用:Socket在网络通信的两端设备都有,是两台机器通信的端点。可以把Socket理解为两台机器连绳子的地方,而输入流和输出流就是绳子
本质:网络通信其实就是Socket之间的通信
一般主动发起通信的应用程序为客户端,等待通信请求的为服务端
示意图如下:
以上就是Java网络编程day0的主要内容,谢谢大家!