JavaSE基础知识分享(十三)

写在前面

今天继续讲Java中的网络编程的知识!

网络编程

概述

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

网络编程
网络编程是实现网络互连的不同计算机上运行的程序间可以进行数据交换的技术。

网络参考模型图

解释

网络模型7层概述:

  1. 物理层

    • 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
    • 主要作用是传输比特流(由 1、0 转化为电流强弱来进行传输)。
    • 数据单位:比特。
  2. 数据链路层

    • 将从物理层接收的数据进行 MAC 地址的封装与解封装。
    • 数据单位:帧。
    • 主要设备:交换机。
  3. 网络层

    • 将从下层接收到的数据进行 IP 地址的封装与解封装。
    • 数据单位:数据包。
    • 主要设备:路由器。
  4. 传输层

    • 定义了数据传输的协议和端口号(如 WWW 端口 80)。
    • 主要协议:TCP(传输控制协议)、UDP(用户数据报协议)。
    • 数据单位:段。
  5. 会话层

    • 通过传输层建立数据传输的通路,发起或接受会话请求。
    • 设备之间需要互相认识(可以是 IP 地址、MAC 地址或主机名)。
  6. 表示层

    • 对接收的数据进行解释、加密与解密、压缩与解压缩等。
    • 将计算机能识别的东西转换成人能识别的东西(如图片、声音等)。
  7. 应用层

    • 终端应用,如 FTP(文件下载)、WEB(浏览器)、QQ(聊天)等。

网络通信三要素

  1. IP 地址

    • 网络中设备的标识,不易记忆,可用主机名。
    • IP 地址的组成:网络号码 + 主机地址。
    • A 类 IP 地址: 1.0.0.1127.255.255.254
      • 例如 10.X.X.X 是私有地址。
      • 127.X.X.X 是保留地址,用做循环测试用的。
    • B 类 IP 地址: 128.0.0.1191.255.255.254
      • 172.16.0.0172.31.255.255 是私有地址。
      • 169.254.X.X 是保留地址。
    • C 类 IP 地址: 192.0.0.1223.255.255.254
      • 192.168.X.X 是私有地址。
    • D 类 IP 地址: 224.0.0.1239.255.255.254(多播地址)。
    • E 类 IP 地址: 240.0.0.1247.255.255.254(保留地址)。

    查看本机 IP 地址

    • DOS 命令: ipconfig
    • CentOS 7: ip addr
    • CentOS 6: ifconfig
  2. 端口号

    • 用于标识进程的逻辑地址,不同进程的标识。
    • 有效端口范围:065535,其中 01024 为系统使用或保留端口。
    • 通过 netstat -ano 可以查看端口号。
  3. 传输协议

    • 通讯的规则。
    • 常见协议:TCP、UDP。

InetAddress 类的使用

获取和操作 IP 地址

  • 静态方法:使用 InetAddress 类的静态方法获取 InetAddress 对象,再进行操作。

方法

  • InetAddress[] getAllByName(String host)
    返回指定主机名称的 IP 地址数组。

  • InetAddress getByAddress(byte[] addr)
    根据原始 IP 地址返回 InetAddress 对象。

  • InetAddress getByAddress(String host, byte[] addr)
    根据主机名和 IP 地址创建 InetAddress 对象。

  • InetAddress getByName(String host)
    确定主机名称的 IP 地址。

Socket

Socket 套接字

  • 网络上具有唯一标识的 IP 地址和端口号组合在一起构成套接字。
  • Socket 原理机制:通信的两端都有 Socket,通过 IO 流传输数据。

UDP

概述

  • 使用 DatagramSocketDatagramPacket 进行 UDP 网络编程。

  • 步骤

    1. 建立 UDP 的 socket 服务。
    2. 将数据封装成数据包。
    3. 通过 UDP 的 socket 服务发送数据包。
    4. 关闭资源。
  • 实现

    • 发送端

    • 接收端

TCP

概述

  • 使用 SocketServerSocket 进行 TCP 网络编程。

  • 步骤

    1. 客户端建立 Socket 服务并连接服务器。
    2. 建立数据传输通道,通过 IO 流进行数据的读取和写入。
    3. 关闭资源。
  • 实现

    • 客户端

    • 服务器端

TCP 传输问题

  • 问题:客户端连接上服务端,两端都在等待,没有任何数据传输。
    • 解决办法:
      • 自定义结束标记。
      • 使用 shutdownInputshutdownOutput 方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/785539.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金箱子

我们设 \(f[i][j]\)表示目前前 \(i\) 个宝箱的期望贡献的 \(j\) 次方。 根据题意可得 $f[i][k]=(f[i-1][1]+a[i])^k \cdot p[i]+(f[i-1][1]+b[i])^k \cdot (1-p[i]) $ 这个式子很难处理,不妨用二项式定理优化 优化后式子则为:\(f[i][k]= \sum _{j=0}^{k} C_{k}^{j} \cdot f[i-…

【PHP安全】demo3:最简单的php代码加密方法

当我们说 "PHP代码加密",我理解的是将 PHP 代码进行混淆或加密,以防止源代码被他人轻易阅读或修改。 这种需求通常用于保护商业秘密或加强代码安全性。常见的工具是使用专业的编译器和加密工具。 然而,请注意,完全保护代码是不可能的,因为最终服务器仍然需要能够…

博客园-awescnb插件-geek皮肤优化--公众号卡片

简介 博客园-awescnb插件-geek皮肤暂不支持配置展示公众号二维码,此文章目的使用手动注入方式自定义实现公众号卡片效果 效果展示公众号卡片动态效果鼠标移入前为公众号指引页 鼠标移入后显示公众号二维码 切换动画为动态反转首页展示实现在博客日历元素blog-calendar前插入自…

Flannel Wireguard 模式

Flannel Wireguard 模式Flannel WireGuard 模式 一、环境信息主机 IPubuntu 172.16.94.141软件 版本docker 26.1.4helm v3.15.0-rc.2kind 0.18.0clab 0.54.2kubernetes 1.23.4ubuntu os Ubuntu 20.04.6 LTSkernel 5.11.5 内核升级文档二、安装服务 kind 配置文件信息 $ cat ins…

统一多层网关好处多,阿里云云原生 API 网关打造全能型网关

本文整理自阿里云云原生 API 网关的公测直播,分享了作为一款全能型网关【云原生 API 网关】是如何帮助企业落地统一网关架构的。作者:问思、望宸 网关承载了业务开发和后端运维的诸多需求,例如路由管理、流量调度、API 管理、入口安全管理等,另外网关侧也需要结合服务治理来…

Kubernetes: client-go 源码剖析(一)

kubernetes:client-go 系列文章:Kubernetes: client-go 源码剖析(一) Kubernetes: client-go 源码剖析(二)0. 前言 在看 kube-scheduler 组件的过程中遇到了 kube-scheduler 对于 client-go 的调用,泛泛的理解调用过程总有种隔靴搔痒的感觉,于是调转头先把 client-go 理…

python03-标准库 第三方库-pathlib模块

python标准库:Python自带的一组模块和库,这些模块和库提供了Python编程所需的基础功能和工具 https://docs.python.org/zh-cn/3/library/index.html?eqid=8ca0b3ea000067990000000264800802Python包索引:即PyPI(Python Package Index),是一个仓库,存放了许多可以通过pi…

企业微信如何远程打卡,免费

现在一些定位软件不好用或者要收费,那么如何能够很好的免费实现远程打开呢? 首先需要一个不用的旧手机,一直放在公司里,然后拿自己常用手机远程操作来实现,具体步骤如下:旧手机需要打开开发者模式,然后打开屏幕常亮保证不会锁屏;公司电脑下载scrcpy用来操作连接的旧手机…

JDK新特性:Stream流式编程

Stream流 Stream是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)Stream流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数…

关于智能编码助手【通义灵码】,开发者们这么说...

自通义灵码发布以来,不停地有开发者朋友为我们送上通义灵码的测评反馈。自通义灵码发布以来,不停地有开发者朋友为我们送上通义灵码的测评反馈。 关于通义灵码,开发者这样说 墨问西东 CEO 池建强&墨问研发团队 “通义灵码有一个强大的功能就是企业知识库检索增强,我们只…

.net8 的webapi部署到华为云的操作

首先还是打包到文件夹:我的服务器是X64的centos 8 系统, 所以我的配置如图: 发布后,我没有用它的dockerfile,而是用的docker-compose去编写的docker脚本,如下:services:ticket_manager_Api: # 服务名称container_name: ticket_manager_Api # 容器名称hostname: ticket…

Qt Line Edit焦点丢失|Checkbox转移焦点丢失

在我设计的一个界面中,用事件过滤器获取键盘方向键,通过键盘方向键转移控件的焦点,获取焦点的控件显示高亮,在从一个Checkbox控件转移焦点到一个Line Edit控件的时候,该获得焦点的控件并没有显示高亮,并且根据后续操作推测焦点消失了,通过qDebug调试发现转移焦点后的那一…