Java技能树之“网络编程”

举报
Mr.Z事顺意 发表于 2023/02/28 17:46:06 2023/02/28
【摘要】 1. 网络编程1.1 网络编程基本概念1、网络将不同区域的电脑连接到一起,组成局域网、城域网或广域网。把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源2、计算机网络是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在==网络操作系统、网络管理软件及通...

1. 网络编程
1.1 网络编程基本概念

1、网络

将不同区域的电脑连接到一起,组成局域网、城域网或广域网。把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源

2、计算机网络

是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在==网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

3、通信协议

计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准

4、通信接口

为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能进行信息交换

接口包括两部分:

    硬件装置:实现节点之间的信息传送

    软件装置:规定双方进行通信的约定协议

网络分层

    由于结点之间联系很复杂,在指定协议时,把复杂成份分解成一些简单的成份,再将他们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系

    TCP/IP是一个协议族,也是按照层次划分,共四层:应用层,传输层,互连网络层,接口层(物理+数据链路层)

    OSI网络通信协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI模型,但是并没有严格按照OSI规定的七层标准去划分,而只划分了四层,这样会更简单点,当划分太多层时,你很难区分某个协议是属于哪个层次的
    在这里插入图片描述
    这里主要关注传输层 - TCP、UDP

1.2 网络编程三要素

1、IP地址

    要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。

2、端口

    网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区别这些应用程序呢?如果说IP地址可以唯一的标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序,也就是应用程序的标识。

3、协议

    通过计算机网络可以使多台计算机实现连接,位于同一网络中的计算机进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为计算机网络通信协议。它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
    常见的协议有TCP协议和UDP协议

1.3 IP地址

IP地址:是网络中设备的唯一标识

IP地址分为两大类

    IPv4:是给每个连接在网络上的主机分配一个32bit地址。按照TCP/IP规定,IP地址用二进制来表示,每个IP地址的长32bit,也就是4个字节。例如一个采用二进制形式的地址是“11000000 10101000 00000001 01000010”,这么长的地址,处理起来也太费劲了。为了方便使用,IP地址经常被写成十进制的形式,中间使用符号“ . ”分隔不同的字节。于是,上面的IP地址可以表示为“192.168.1.66”。IP地址的这种表示法叫做 “点分十进制法”,这显然比1和0容易记得多
    IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,通过IPv6重新定义地址空间,采用128bit地址长度,每16个字节一组,分成8组十六进制数,这就解决了网络地址资源数量不够的问题

常用DOS命令

    ipconfig:查看本机IP地址
    ping IP地址:检查网络是否连通

示例
在这里插入图片描述

在这里插入图片描述
特殊IP地址

    127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用
    190.168.0.0 – 192.168.255.255:私有地址,属于非注册地址,专门为组织机构内部使用

1.4 InetAddress 的使用

为了方便我们对IP地址的获取和操作,Java提供了一个类InetAddress供我们使用

InetAddress:此类表示Internet协议(IP)地址,用于封装计算机的IP地址和DNS(没有端口信息)
方法名    描述
static InetAddress getByName(String host)    确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址和域名
String getHostName()    获取此IP地址的主机名
String getHostAddress()    返回文本显示中的IP地址字符串

示例代码

public class InetAddressDemo {
    public static void main(String[] args) throws UnknownHostException {
//        InetAddress address = InetAddress.getByName("DreamDragon");
//        InetAddress address = InetAddress.getByName("10.19.65.91");
        InetAddress address = InetAddress.getByName("www.baidu.com");

        String name = address.getHostName();
        String ip = address.getHostAddress();

        System.out.println("主机名:" + name);
        System.out.println("IP地址: " + ip);
    }
}

主机名:www.baidu.com
IP地址: 39.156.66.18

    主机名称可以在 Windows设置 - 系统 - 关于 里找到和重命名(Win10)

1.5 端口
端口相关概念

端口:设备上应用程序的唯一标识

端口号: 用两个字节表示的整数,它的取值范围是0 - 65535。

    公认端口:0 - 1023之间的端口号用于一些知名的网络服务和应用,比如80端口分配给www,21端口分配给FTP**
    注册端口:1024 - 49151 分配给用户进程或应用程序**
    动态/私有端口: 49152 - 65535
    如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

端口相关DOS命令

    查看所有端口:netstat -ano
    查看指定端口:netstat -aon|findstr "80"
    查看指定进程:tasklist|findstr "12476"
    查看具体程序:使用任务管理器查看PID
    在这里插入图片描述

IntetSocketAddress类

    包含IP和端口信息,常用于Socket通信。此类实现IP套接字地址(IP地址+端口号),不依赖任何协议
    在这里插入图片描述

常用构造器
构造方法    说明
InetSocketAddress(InetAddress addr, int port)    从IP地址和端口号创建套接字地址
InetSocketAddress(int port)    创建一个套接字地址,其中IP地址为通配符地址,端口号为指定值
InetSocketAddress(String hostname, int port)    根据主机名和端口号创建套接字地址

常用方法
方法    说明
InetAddress getAddress()    获得 InetAddress
int getPort()    获取端口号
String getHostName()    获取主机名

public class PostTest {
    public static void main(String[] args) {
        //包含端口
        InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",8080);
        InetSocketAddress socketAddress2 = new InetSocketAddress("localhost",9000);
        System.out.println(socketAddress.getHostName());    // 获取主机名
        System.out.println(socketAddress.getAddress());        // 获取地址
        System.out.println(socketAddress2.getAddress());
        System.out.println(socketAddress.getPort());        // 获取端口号
        System.out.println(socketAddress2.getPort());
    }
}

    关于localhost
    在这里插入图片描述
    图片转载于:https://www.cnblogs.com/zyy98877/p/9266652.html

1.6 URL
URL基本概念

URL: Uniform Resource Locator 统一资源定位符

    表示统一资源定位符,指向万维网上的“资源”的指针。用于区分、定位资源

    一个标准的URL必须包括:protocol(方案或协议)、host(主机)、port(端口)、path(路径)、parameter( 查询参数)、anchor(锚点)

    在www上,每一信息资源都有统一且唯一的地址

    如:http://www.google.com:80/index.html,分四部分组成:协议、存放资源的主机域名、端口号、资源文件名

URL类

在这里插入图片描述
构造器    说明
URL(String spec)    从 String表示形成一个 URL对象
常用方法    说明
String getProtocol()    获取此 URL的协议名称
String getHost()    获取此 URL的主机名(如适用)
int getPort()    获取此 URL的端口号
String getPath()    获取此 URL的路径部分
String getFile()    获取此 URL的文件名
String getQuery()    获取参数
String getRef()    获取锚点

示例代码

public class URLTest01 {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("http://www.baidu.com:80/index.html?uname=dream&age=18#a");
        // 获取四个值:协议、域名、端口、请求资源
        System.out.println("协议:" + url.getProtocol());
        System.out.println("域名|IP:" + url.getHost());
        System.out.println("端口:" + url.getHost());
        System.out.println("请求资源1:" + url.getPath());
        System.out.println("请求资源2:" + url.getFile());
        // 参数
        System.out.println("参数:" + url.getQuery());
        // 锚点
        System.out.println("锚点:" + url.getRef());
    }
}

协议:http
域名|IP:www.baidu.com
端口:www.baidu.com
请求资源1:/index.html
请求资源2:/index.html?uname=dream&age=18
参数:uname=dream&age=18
锚点:a

URI、URL和URN三者关系

关于URI、URL和URN关系,可以阅读此博文URI、URL和URN关系
1.7 协议

协议:计算机网络中,连接和通信的规则被称为网络通信协议

1、UDP协议

    用户数据报协议(User Datagram Protocol)

    UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据

    由于使用UDP协议消耗资源少,通信效率高,所以通常都会用于音频、视频和普通数据的传输

    例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

2、TCP协议

    传输控制协议(Transmission Control Protocol)

    TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据出啊u念书。在TCP连接中必须明确客户端与服务器端,由于客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”

三次握手

    TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

    第一次握手:客户端向服务器端发出连接请求,等待服务器确认

    第二次握手:服务器端向客户端回送一个响应,通知客户端收到了连接请求

    第三次握手:客户端再次向服务器端发送确认信息,确认连接
    在这里插入图片描述

    完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用非常广泛。例如上传文件、下载文件、浏览网页

3 、通信要素1:IP和端口号

IP 地址:InetAddress

    唯一的标识 Internet 上的计算机(通信实体)
    本地回环地址(hostAddress):127.0.0.1 主机名(hostName):localhost
    IP地址分类方式1:IPV4 和 IPV6
        IPV4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。以点分十进制表示,如192.168.0.1
        IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
    IP地址分类方式2:公网地址(万维网使用)和私有地址(局域网使用)。192.168.开头的就是私有址址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用
    特点:不易记忆

端口号标识正在计算机上运行的进程(程序)

    不同的进程有不同的端口号
    被规定为一个 16 位的整数 0~65535。

端口分类:

    公认端口:0~1023。被预先定义的服务通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23)
    注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。
    动态/私有端口:49152~65535。

端口号与IP地址的组合得出一个网络套接字:Socket。

InetAddress类

Internet上的主机有两种方式表示地址:

    域名(hostName):www.atguigu.com
    IP 地址(hostAddress):202.108.35.210

InetAddress类主要表示IP地址,两个子类:Inet4Address、Inet6Address。

InetAddress 类 对 象 含 有 一 个 Internet 主 机 地 址 的 域 名 和 IP 地 址 :
www.atguigu.com 和 202.108.35.210。

域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS)
负责将域名转化成IP地址,这样才能和主机建立连接。 -------域名解析

public static void main(String[] args) {
        try {
            InetAddress address_1 = InetAddress.getByName("www.atguigu.com");
            System.out.println(address_1);
            // 获取InetAddress 对象所含的域名
            System.out.println(address_1.getHostName());
            // 获取InetAddress 对象所含的IP地址
            System.out.println(address_1.getHostAddress());
            // 获取本机的域名和IP地址
            InetAddress address_2 = InetAddress.getLocalHost();
            System.out.println(address_2);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

4、 通信要素2:网络协议
1.1、网络通信协议

计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代
码结构、传输控制步骤、出错控制等制定标准。

问题:网络协议太复杂
计算机网络通信涉及内容很多,比如指定源地址和目标地址,加密解密,压缩
解压缩,差错控制,流量控制,路由控制,如何实现如此复杂的网络协议呢?

通信协议分层的思想
在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常
用的复合方式是层次方式,**即同层间可以通信、上一层可以调用下一层,而与
再下一层不发生关系。**各层互不影响,利于系统的开发和扩展。
1.2、TCP/IP协议簇

传输层协议中有两个非常重要的协议:

    传输控制协议TCP(Transmission Control Protocol)
    用户数据报协议UDP(User Datagram Protocol)。

TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP) 而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。

    IP(Internet Protocol)协议是网络层的主要协议,支持网间互连的数据通信。
    TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即**物理链路层、IP层、传输层和应用层。**

1.3、TCP 和 UDP

TCP协议:

    使用TCP协议前,须先建立TCP连接,形成传输数据通道
    传输前,采用“三次握手”方式,点对点通信,是可靠的
    TCP协议进行通信的两个应用进程:客户端、服务端。
    在连接中可进行大数据量的传输
    传输完毕,需释放已建立的连接,效率低

UDP协议:

    将数据、源、目的封装成数据包,不需要建立连接
    每个数据报的大小限制在64K内
    发送不管对方是否准备好,接收方收到也不确认,故是不可靠的
    可以广播发送
    发送数据结束时无需释放资源,开销小,速度快

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。