Java网络编程day0

网络的相关概念

概念:两台设备通过网络实现数据传输

网络通信:将数据从一台设备传输到另一台设备

在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的主要内容,谢谢大家!

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值