Java--网络编程

news/2024/11/17 6:31:42/文章来源:https://www.cnblogs.com/yangcurry/p/18390316

目录
  • 计算机网络定义
  • 网络编程定义
  • 网络体系结构
    • OSI 七层参考模型
    • TCP/IP 四层协议
    • TCP/IP 协议族
        • TCP/IP 协议关系
    • 常见网络协议
        • IP 协议
        • TCP 协议
        • UDP 协议
        • TCP 与 UDP 区别
        • HTTP 协议
        • Socket 套接字
        • 网络通信五要素
        • Socket 通信模型
        • Socket 客户端编程
        • Socket 服务器端编程

计算机网络定义

计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统

网络编程定义

网络编程就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java 语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程

网络体系结构

计算机网络体系结构是计算机网络层次和协议的集合,网络体系结构对计算机网络实现的功能,以及网络协议、层次、接口和服务进行了描述,但并不涉及具体的实现

OSI 七层参考模型

  • 应用层:应用层为OSI的最高层,是直接为应用进程提供服务的。
  • 表示层:表示层功能是把应用层提供的信息变换为能够共同理解的形式
  • 会话层:会话层的主要功能是负责应用程序之间建立、维持和中断会话
  • 传输层:传输层起着承上启下的作用,涉及源端节点到目的端节点之间可靠的信息传输
  • 网络层:网络层涉及源主机节点到目的主机节点之间可靠的网络传输
  • 数据链路层:数据链路层的功能是实现计算机网络中相邻节点之间的可靠传输
  • 物理层:数据链路层的功能是实现计算机网络中相邻节点之间的可靠传输
    目录
    • 计算机网络定义
    • 网络编程定义
    • 网络体系结构
      • OSI 七层参考模型
      • TCP/IP 四层协议
      • TCP/IP 协议族
          • TCP/IP 协议关系
      • 常见网络协议
          • IP 协议
          • TCP 协议
          • UDP 协议
          • TCP 与 UDP 区别
          • HTTP 协议
          • Socket 套接字
          • 网络通信五要素
          • Socket 通信模型
          • Socket 客户端编程
          • Socket 服务器端编程

TCP/IP 四层协议

TCP/IP参考模型采用 4 层的层级结构,每一层都调用它的下一层所提供的协议来完成自己的需求

  • 应用层:应用层为 Internet 中的各种网络应用提供服务
  • 传输层:传输层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中
  • 网络层:网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机
  • 网络接口层:TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着OSI参考模型的物理层和数据链路层

TCP/IP 协议族

image-20210803110246364

TCP/IP 协议关系

image-20210803110308915

  • 上层协议依赖下层协议提供的支持与服务
  • 不同协议提供不同的服务以满足不同的网络需求

常见网络协议

IP 协议

IP 协议的作用在于把计算机网络中各种设备终端的数据包准备无误的传递给对方

  • IP 地址:IP 地址也叫逻辑地址或动态,由网络层路由器为计算机网络上的每一台主机分配的 32 位数字组成的地址,该地址可以动态修改,如 192.168.229.11
  • MAC 地址:MAC 地址也叫物理地址或硬件地址,由 48 比特长的 16 进制数字组成,由设备厂家分配全球唯一且不能修改,如 44-45-53-54-00-00
TCP 协议

TCP(传输控制协议)是面向连接的协议,它的作用是为不同主机的应用层之间建立可靠的、像管道一样的连接,以确保不同主机之间能够相互通信

TCP 的三次握手与四次挥手

image-20210803110454430

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据

  • 第一次握手(客户端发送请求):客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认。
  • 第二次握手(服务端回传确认):服务器收到客户端连接请求报文,如果同意建立连接,向客户机发回确认报文段(ACK)应答,并为该TCP连接分配TCP缓存和变量。
  • 第三次握手(客户端回传确认):客户机收到服务器的确认报文段后,向服务器给出确认报文段(ACK),并且也要给该连接分配缓存和变量。此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
UDP 协议

UDP(用户数据报协议),它是 TCP/IP 协议簇中无连接的传输层协议,提供快速但不一定可靠的传输服务

image-20210803110622021

UDP协议由两部分组成:首部和数据。首部仅有8个字节,包括源端口和目的端口、长度(UDP用于数据报的长度)、校验和

TCP 与 UDP 区别

image-20210803110648147

HTTP 协议

HTTP(超文本传输协议),是一种为分布式、合作式、多媒体信息系统服务,面向应用层的协议,是 Internet 上目前使用最广泛的应用层协议,它基于传输层的 TCP 协议进行通信,HTTP 协议是通用的、无状态的协议。

image-20210803110719558

Socket 套接字

Socket 套接字,实际上是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API),通过 Socket,我们才能使用 TCP/IP 协议。

  • Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元
  • TCP/IP 只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口(支持 TCP 或者 UDP 编程接口)
  • Java 网络编程主要涉及到的内容是 Socket 套接字编程
网络通信五要素

image-20210803110904049

Socket 通信模型

Socket 编程 = Socket 客户端编程(Client) + Socket 服务器端编程(Server)

image-20210803110949122

Socket 客户端编程
  • 步骤一:创建 Socket 套接字实例(绑定服务器端 IP 地址和端口号)

    Socket socket = new Socket(“127.0.0.1”, 9999 );
    
  • 步骤二:创建网络输入/输出流

    InputStream inputStream    = socket.getInputStream();
    OutputSteam outputStream = socket.getOutputStream()
    
  • 步骤三:关闭 Socket 连接

    socket.close();
    
Socket 服务器端编程
  • 步骤一:创建 ServerSocket 套接字实例(绑定监听端口号)

    ServerSocket serverSocket = new ServerSocket( 9999 );
    
  • 步骤二:监听来自客户端的网络连接

    Socket socket = serverSocket.accept();
    
  • 步骤三:创建网络输入/输出流

    InputStream inputStream    = serverSocket.getInputStream();
    OutputSteam outputStream = serverSocket.getOutputStream()
    
  • 步骤四:关闭 Socket 连接 和 ServerSocket 连接

    socket.close();
    serverSocket.close();
    

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

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

相关文章

分析和排查系统故障

日志文件2-1 日志的功能 用于记录系统、程序运行中发生的各种事件 通过阅读日志,有助于诊断和解决系统故障 日志文件的分类 内核及系统日志 由系统服务rsyslog统一进行管理,日志格式基本相似 用户日志 记录系统用户登录及退出系统的相关信息 程序日志 由各种应用程序独立管理…

linux基础网络设置

查看网络接口信息 ifconfig 查看所有活动网络接口的信息 执行 ifconfig 命令 查看指定网络接口信息 ifconfig 网络接口名 查看主机名称hostname hostname命令 查看或设置当前主机名 hostname 查看路由表条目 route route命令 查看或设置主机中路由表信息 route -n 查看网络连接…

磁盘和文件系统管理(一)

检测并确认新硬盘 fdisk命令 查看或管理磁盘分区 fdisk -l [磁盘设备] 或 fdisk [磁盘设备] 交互模式中的常用指令 m、p、n、d、t、w、q d delete a partition * 删除分区 g create a new empty GPT partition table 创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区) l li…

记录vue3写项目遇到的奇奇怪怪怪的小问题(持续更新)

<el-table:header-cell-style="{ color: #fff, background:rgba(78, 131, 211, 0.8) }"// 设置table表头样式> </el-table>表头居中 :cell-style="{text-align:center}" 表行居中<el-table-columnprop="xxx"align="center&q…

如何安装peiqi文库

一:安装包下载 方法一:hithub上搜索peiqi方法二:使用自己搭建的ubuntu,kali,linux都可。我用的ubuntu 输入命令:git clone https://gitee.com/peiqi0/PeiQi-WIKI-Book.git二:查看安装情况 1:ls查看是否安装成功2:cd 进入3:安装nmp sudo apt-get install npm4:通过np…

040.CI4框架CodeIgniter,使用Response实现前后端分离并返回JSON

01、BaseController.php代码如下:<?phpnamespace App\Controllers;use CodeIgniter\Controller; use CodeIgniter\HTTP\CLIRequest; use CodeIgniter\API\ResponseTrait; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\…

使用 Quickwit 的搜索流功能为 ClickHouse 添加全文搜索

本指南将帮助您使用 Quickwit 的搜索流功能为知名的 OLAP 数据库 ClickHouse 添加全文搜索。Quickwit 暴露了一个 REST 端点,可以极快地(每秒最多 5000 万条)流式传输匹配搜索查询的 ID 或其他属性,ClickHouse 可以轻松地使用它们进行连接查询。 我们将采用 GitHub 存档数据…

《周易》:大衍筮法

@目录前言1.爻与卦1.1 阴爻与阳爻1.2 经卦1.2.1 先天八卦图1.3 别卦1.3.1 六爻2.大衍筮法2.1 天地之数与大衍之数2.1.1 天地之数2.1.2 大衍之数2.2 大衍筮法的操作2.2.1 流程2.2.2 第一组操作的准备2.2.3 分而为二2.2.4 挂一以象三2.2.5 揲之以四,以象四时过揲归奇于扐一挂二扐…

【阅己书城】逆向生成代码

1、配置renren-generator # application.ymlserver:port: 80 # mysql spring:datasource:type: com.alibaba.druid.pool.DruidDataSource#MySQL配置driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///:3306/yueji_pms?useUnicode=true&characterEncoding=UTF-…

SimpleTranslationAIAgent:基于C#与LLM的翻译AI Agent

基于C#与LLM通过简单对话即可实现文件到文件的翻译任务 该软件是MIT协议完全开源免费的,但是调用LLM的API可能需要费用,但是没关系,赛博菩萨硅基流动与智谱AI等都有免费的模型可调了。 这个Translation AI Agent只是一个简单的AI Agent示例应用,可能很多人都不需要它。 开源…

SimpleTranslationAIAgent借助SiliconCloud API 构建自己的专属翻译助手

SimpleTranslationAIAgent介绍 SimpleTranslationAIAgent是一款基于C#与LLM通过简单对话即可实现文件到文件的翻译任务的简单应用,基于WPF与Semantic Kernel构建。 该软件是MIT协议完全开源免费的,但是调用LLM的API可能需要费用,但是没关系,赛博菩萨硅基流动有免费的模型可…

autodock vina后处理分析

拆分对接结果vina_split --input result.pdbqt --ligand complex/lig使用mv命令批量修改文件名,把01-09修改成1-9,便于批量处理for i in `seq 1 9`; do > mv "lig0${i}.pdbqt" "lig${i}.pdbqt" > done使用Openbabel把pdbqt转成pdbfor i in `seq …