【剧前爆米花--爪哇岛寻宝】网络编程一些概念以及Java实现网络编程流程

news2024/11/26 21:42:21

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于网络初识的文章,在这篇文章中剖析了网络编程的一些概念以及用Java实现网络编程的一些流程,希望对你有所帮助!

 

目录

网络编程

含义和一些概念

发送端和接收端

请求与响应

客户端和服务端

常见的客户端服务端模型

Socket套接字

TCP和UDP的特点

Java数据报套接字通信模型

Java流套接字通信模型


网络编程

含义和一些概念

网络编程,指网络上的主机,通过 不同的进程 ,以编程的方式实现 网络通信(或称为网络数据传输)
当然,我们只要满足 进程 不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。
特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。

 

进程A:编程来获取网络资源。进程B:编程来提供网络资源。 

发送端和接收端

在一次网络传输中:

发送端 :数据的 发送方进程 ,称为发送端。发送端主机即网络通信中的源主机。
接收端 :数据的 接收方进程 ,称为接收端。接收端主机即网络通信中的目的主机。
收发端 :发送端和接收端两端,也简称为收发端。
注意:发送端和接收端只是相对的,只是一次网络数据传输产生数据流向后的概念。

在上述图文中,如果主机2将视频资源发送给主机1,那主机1就是接收端,主机2就是发送端。

如果主机1向主机2发送一个需要资源的请求,那此时主机1就是发送端,主机2就是接收端。

请求与响应

就像上述过程一样,获取一个网络资源一般需要涉及到两次网络传输:第一次是请求数据的发送,第二次是响应数据的发送。

客户端和服务端

服务端 :在常见的网络数据传输场景下,把 提供服务 的一方进程,称为服务端,可以提供对外服务。
客户端 获取服务 的一方进程,称为客户端。

 这个服务可以是获取服务资源,比如请求获取一个视频资源等,也可以是请求保存资源等。这些都可以算是服务,上述图文中,主机1是客户端,主机2是服务端。

常见的客户端服务端模型

最常见的场景,客户端是指给用户使用的程序,服务端是提供用户服务的程序:
1. 客户端先发送请求到服务端
2. 服务端根据请求数据,执行相应的业务处理
3. 服务端返回响应:发送业务处理结果
4. 客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)

 

主打的就是一个有应有答。

Socket套接字

Socket 套接字,是操作系统给应用程序提供的一组用于网络编程的API,操作系统原生的socket API 是C语言的,在这里,java将其进行了封装。

Socket套接字主要针对传输层协议划分成流套接字和数据报套接字,其中流套接字使用传输层TCP协议,而数据报套接字使用传输层UDP协议。

TCP和UDP的特点

以下为 TCP 的特点(细节后续再学习):
1.有连接
2.可靠传输
3.面向字节流
4.有接收缓冲区,也有发送缓冲区
5.大小不限
对于字节流来说,可以简单的理解为,传输数据是基于 IO 流,流式数据的特征就是在 IO 流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收。
以下为 UDP 的特点(细节后续再学习):
1.无连接
2.不可靠传输
3.面向数据报
4.有接收缓冲区,无发送缓冲区
5.大小受限:一次最多传输 64k
对于数据报来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如 100 个字节,必须一 次发送,接收也必须一次接收100 个字节,而不能分 100 次,每次接收 1 个字节。

Java数据报套接字通信模型

对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报。

java 中使用 UDP 协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使用
DatagramPacket 作为发送或接收的 UDP 数据报。所谓的socket,是一个特殊的文件,是网卡这个硬件设备的抽象表示,网卡是网络通信中一个不可缺少的硬件,socket就像一个遥控器,代码通过操作socket来操作网卡进而实现通信,通信的流程如下:
1.接收端会首先创建一个DatagramSocket和一个空的DatagramPacket,这个空的DatagraPacket用来接受发送端发送过来的数据。
2.发送端会创建DatagramSocket,然后构造发送的内容比如需要发送的数据,和发送需要的ip地址,端口号等信息,将这些打包成一个DatagramPacket进行发送。
3.接收端接收到发送端发送来的UDP数据报后会将之前空的数据报进行更新,然后根据接收的数据,执行业务。
4.接着接收端会构造发送的内容,这个发送的内容就是响应。
5.发送端会构造一个空的数据报来接收这个响应,然后根据响应的数据决定下一步应该怎么做。

Java流套接字通信模型

流套接字通信模型是有连接的,我们将通信的双方分为Server服务端和Client客户端,所以他们之间的通信过程如下:

1.首先服务端会创建ServerSocket,这个ServerSocket会调用accept()方法等待接受请求。

2.客户端会创建链接Socket向服务端发送请求,服务端接受过后会创建链接Socket,这两个完全建立了连接。

3.此时服务端和客户端就可以实现相互通信,即服务端的InputStream流与客户端的OutputStream之间,客户端的InputStream和服务端的OutputStream之间。

4.最后结束通信时,服务端的Socket和客户端的Socket都需要调用close()方法进行关闭。

 以上就是本篇博客的全部内容,在下一篇博客中我会实现一个简易的客户端和服务端,如有疏漏欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sysMaster: 全新1号进程实现方案,秒级自愈,保障系统全天在线

认识 1 号进程和 sysMaster 在 Linux 操作系统中,1 号进程是 init 进程,它是所有其他进程的祖先进程。init 进程是系统启动时第一个被创建的进程,它负责启动和管理其他所有进程,并在系统关机时关闭它们。在现代 Linux 系统中&…

数组--part 4--长度最小的子数组(力扣299/904/76)

文章目录 算法基本思想leetcode 209 长度最小的子数组leetcode 904 水果成篮leetcode 76 最小覆盖子串 算法基本思想 首先对于滑动窗口,题目可以先去看看leetcode 209 进行相关的了解后,再来书写代码。 首先我们的第一想法肯定就是暴力解法&#xff1a…

html实现汉诺塔小游戏

文章目录 1.设计来源汉诺塔由来1.1 主界面1.2 游戏规则1.3 游戏完成界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/130606736 html实现汉诺塔小游戏源码 汉诺塔&…

数据结构-链表(详解)

前言:内容包括:链表的分类,无头单向非循环链表的增删查改的实现,带头双向循环链表的增删查改的实现 目录 链表的分类 1. 单向或者双向 ​编辑 2. 带头或者不带头 3. 循环或者非循环 无头单向非循环链表: ​编辑…

造梦日记 Printidea 用户手册

*Hi 造梦日记* 欢迎来到造梦日记的空间~ 造梦日记Printidea是一款基于AI算法、输入文字或图片即可生成高质量图片的工具,由西湖大学深度学习实验室和西湖心辰联合出品,超强算力,0.8秒出图,目前支持微信小程序、网页端…

边缘计算盒子的特点?边缘计算盒子适用于什么场景

边缘计算盒子(Edge Computing Box)是一种用于边缘计算的硬件设备,它通常是一个小型的计算设备,具备一定的计算能力和存储资源,并且能够连接到网络。边缘计算盒子的主要目的是在物联网(IoT)和分布…

续ShaderEditor、Inspector之后又一成功爆品,2周260+单!

01 前言 大家好,我是98K!五一前,我上架 Cocos Store 的『高性能割草框架』增加 Cocos Creator 2.4.x 引擎,已经支持的老铁可免费更新! 后续的更新计划是:完善2D游戏案例、增加3D案例、支持RVO和群聚&#…

Android WebView 长按弹出的文本选择器如何监听滑动和如何弹出完全自定义的菜单栏

在这次改版中,h5小伙伴与我沟通说要把长按选择改用成原生的拉选框,之前我也没搞过呀,开始研究吧。 怎么研究呀,当然是百度一下了。 百度了一天总结如下: 好多文章都是告诉你如何在系统的基础上来修改自己的文字和点…

vue2 框架运行原理剖析系列(二)之 组件挂载$mount神秘之旅!!!

一、vue组件挂载 1.1 上一篇文章中,介绍到组件执行 mountComponent 函数,本文对此展开详细的讲解。 1.2 调用改方法的位置在于entry-runtime-with-compiler.js 的Vue.prototype.$mount,具体代码如下: 其中, &#xff…

【图像融合】Dif-Fusion:基于扩散模型的红外/可见图像融合方法

文章目录 摘要一、前言二、相关工作1.红外线和可见光的图像融合2.扩散模型(可见博主之前的博客) 三、方法1.红外线和可见光图像的联合扩散2*.多通道扩散特征的融合 四、实验1.实验设置2.融合性能分析(效果展示)3.泛化实验 总结 摘…

通知短信 API 技术细节以及发送流程机制原理解析

引言 短信是一种简单、直接、高效的通信方式,被广泛应用于各个领域。在移动互联网时代,短信成为了客户服务、政府通知、公共服务等方面的重要工具。为了更好地利用短信这种通信方式,通知短信 API应运而生。短信API可以帮助企业、政府和应用程…

RK3588旗舰32T人工智能多网口边缘智能网关交换机

32T边缘智能网关发布,助力多行业数字化升级,运维降本增效,搭载RK3588旗舰芯 搭载瑞芯微RK3588芯片的边缘智能网关XM-RK3588,算力可扩展至32T,适用于电力能源、智慧交通、智慧城市、智慧安防、智慧医疗、工业互联网等领…

前端的加密和解密,crypto-js的应用,AES / RSA / md5

每日鸡汤:每个你想学习的瞬间,都是未来你的向自己求救 内容预警*****新手内容,自己学习总结用****大佬请绕道 之前看https原理,看到对称加密和非对称加密,各种加密方法,看得云里雾里,即便是总结…

报错main.py: error: unrecognized arguments: stack_size 4 1001,770,123

运行从GitHub上面下载下来的代码时,按照作者提供的输入命令输入后报错: main.py: error: unrecognized arguments: stack_size 4 1001,770,123 将报错的部分在网上百度,找到部分方法,得出理解:输入的命令是出错的&am…

【RS专题】怎么知道你遇到的是rs风控

本文属于技术分享、如有侵权可联系本人下架 最简单的方法就是查看cookie,在控制台输入【document.cookie】 如果出现如上图中有【xxxxxxT】或者【xxxxxxP】的,并且它的值都为英文数字和下滑线加点,那么基本可以确定这个网站用了rs反爬 什么是rs反爬,下面抄一段内容 瑞数动…

【瑞数RS专题】首层代码分析,和获取eval层代码,cookie反爬虫详解

如有侵权、联系本人下架 以下面两个网站为例 1.aHR0cDovL3d3dy5mYW5nZGkuY29tLmNuL25ld19ob3VzZS9uZXdfaG91c2VfZGV0YWlsLmh0bWw= 2.aHR0cHM6Ly93d3cubm1wYS5nb3YuY24veWFvd2VuL3lwamd5dy9pbmRleC5odG1s 首先明确一下目标,我们要先获取网页200的源代码,RS5代第一次响应为…

unittest自动化测试框架讲解以及实战

为什么要学习unittest 按照测试阶段来划分,可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,通常指函数或者类,一般是开发完成的。 单元…

软件架构:软件架构设计的三个维度

架构设计是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会。这篇文章主要介绍面向对象OO、面向方面AOP和面向服务SOA这三个要素在架构设计中的位置与作用。   架构设计有三个维度,或者说是我们…

文案改写神器软件-文案改编神器

文案改写神器软件 文案改写神器软件通常致力于通过人工智能技术将一篇已有文案进行改写和改编,以达到复用或优化的目的。以下是文案改写神器软件通常可以做的事情: 改写原文:文案改写神器可以通过自定义规则、语法分析和文本相似性匹配等功能…

设计模式之【组合模式】,树形结构的完美解决方案

文章目录 一、什么是组合模式1、组合模式三大角色2、组合模式应用场景3、组合模式注意事项和细节 二、透明组合模式1、学院院系案例2、透明组合模式总结 三、安全组合模式1、linux目录系统案例2、安全组合模式总结 四、源码中使用的组合模式1、HashMap2、ArrayList3、MyBatis 一…