网络编程1_网络编程引入
为什么需要网络编程?
用户再在浏览器中,打开在线视频资源等等,实质上说通过网络,获取到从网络上传输过来的一个资源。
与打开本地的文件类似,只是这个文件的来源是网络。相比本地资源来说,网络提供了更为丰富的网络资源。
所谓网络资源 ,其实就是在网络中获取到各种数据资源。而所有的网络资源,都是通过网络编程来进行数据传输。
什么是网络编程
网络编程:网络上的主机,通过不同的进程,以编程的方式实现网络通信(网络数据传输)。
也可以只需要满足进程不同即可。所以即使是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。
特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。
但是,我们一定要明确,我们的目的是使网络上的不同主机,基于网络来传输数据资源。
进程A :编程来获取网络资源。
进程B:编程来提供网络资源。
网络编程中的基本概念
发送端和接收端
在一次网络数据传输时:
发送端:数据发送方的进程,称为发送端。发送端主机即网络通信的源主机。
接收端:数据接收方的进程,称为接收端。接收端主机即网络通信的目的主机。
收发端:既发送数据,又接收数据。
注意:发送端和接收端只是相对的,只是一次网络数据传输中,产生数据流向的概念。
请求和响应
一般来说,获取一个网络资源,涉及到两次网络数据传输。
第一次:请求数据的发送(request)。
第二次:响应数据的发送。(response)。
客户端和服务端
服务端:在常见的网络数据传输场景下,把提供服务的一方进程,称为“服务端”,可以对外提供服务。(也就是我们常说的服务器)
客户端:获取服务的一方进程,称为客户端。
客户端获取服务资源:
客户端保存资源在服务端:
常见的客户端服务端模型
最常见的场景,客户端说给用户的程序,而服务端是给用户提供服务的程序。
1、客户端先发送请求给服务器。
2、服务器根据请求数据,进行相应业务的处理。
3、服务端返回响应:发送业务处理结果。
4、客户端根据响应的数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)
客户端和服务器之间的交互,也是有很多种模式的:
1、一问一答:一个请求对应一个响应。(最常见的模式,网站开发(web开发)就是使用这种一问一答的模式)
2、一问多答:一个请求对应多个响应。(多出现于“下载”场景中)。
3、多问一答:多个请求,对应一个响应(多出现于“上传”场景中)。
4、多问多答:一个请求可能对应多个响应,一个响应也可能对应多个请求。(多用于“远程桌面/远程控制”)。
Socket套接字
概念
Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。
分类
Socket套接字主要针对应用层->传输层的协议分为如下三类:
字节流套接字
使用传输层的TCP协议,主要有以下特点:
1、有连接:通信双方必须都认同,才能使数据能够传输。
2、可靠传输:尽可能地传输数据,就算无法传输也能知道数据最终对方是否收到。
3、面向字节流:与文件中的字节流相同。
4、全双工:能够同时发送和接收信息。
数据报套接字
使用UDP协议,特点:
1、无连接
2、不可靠传输
3、面向数据报
4、全双工
原始套接字
这里不做过多赘述 ……
Java数据报套接字通信模型
UDP协议来说,具有无连接、面向数据报的特征,即每次通信都没有建立连接,并且一次发送全部数据报,一次接收全部数据报。
Java中使用UDP协议通信,主要基于DatagramSocket类来创建数据报套接字,并使用DatagramPacket作为发送或者接收的UDP数据报。一次发送及接收UDP数据报流程如下:
以上只是一次发送端的UDP数据报发送和接收端数据报接收,并没有返回数据。也就是只有请求,并没有返回响应。对于一个服务器来说,重要的是处理多个客户端的请求并返回响应,流程如下:
Java字节流套接字通信模型
Socket编程的注意事项
1、客户端和服务器:我们自己练习开发时,经常是基于一个主机开启两个进程作为客户端和服务器,但真实的场景中,一般是不同主机作为客户端和服务器。
2、目的IP和端口号,表示了一次数据传输时要发送数据的终点主机和进程
3、Socket编程我们使用的是字节流套接字和数据报套接字,是基于传输层的TCP或者UDP协议,但也要考虑应用层协议,也需要考虑。
4、如果一个进程A已经绑定了一个端口,再启动另一个进程B绑定该端口,这种情况也叫做端口号被占用。在Java中,如果端口号被占用就会报出如下异常:
此时可以检查进程B绑定的时那个端口,再查看该端口被哪个进程占用。
在cmd中输入netstat -ano|findstr 端口号,就可以显示出对应进程的pid
在任务管理器中,通过pid查找进程
解决端口被占用问题 :
如果占用端口的进程A不需要进行,就可以关闭A之后,再启动需要绑定该端口的进程B。
如果需要运行A进程,也可以修改进程B的绑定端口,换为其他没有使用的端口。
相关文章:

网络编程1_网络编程引入
为什么需要网络编程? 用户再在浏览器中,打开在线视频资源等等,实质上说通过网络,获取到从网络上传输过来的一个资源。 与打开本地的文件类似,只是这个文件的来源是网络。相比本地资源来说,网络提供了更为…...

【Day38】
DAY 38 Dataset和Dataloader类 对应5. 27作业 知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图片 import …...

HTML Day04
Day04 0.引言1. HTML字符实体2. HTML表单2.1 表单标签2.2 表单示例 3. HTML框架4. HTML颜色4.1 16进制表示法4.2 rgba表示法4.3 名称表达法 5. HTML脚本 0.引言 刚刚回顾了前面几篇博客,感觉写的内容倒是很详细,每个知识点都做了说明。但是感觉在知识组织…...
佳能 Canon G3030 Series 打印机信息
基本参数 连接方式:Hi-Speed USB 接口,支持 IEEE802.11n/802.11g/802.11b/802.11a/802.11ac 无线连接,可同时使用 USB 和网络连接。尺寸重量:外观尺寸约为 416337177mm,重量约为 6.0kg。电源规格:AC 100-2…...

云原生安全基石:Kubernetes 核心概念与安全实践指南
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. Kubernetes 架构全景 Kubernetes(简称 K8s)采用主从架构,由控制平面(Control Plane&…...
图像修复的可视化demo代码
做项目的时候需要用到一个windows窗口可视化来展示我们的工作,我们的工作是一个文本指导的人脸图像修复,所以窗口需要包括输入图像,文本指导输入和修复结果,并且提供在输入图像上画mask的功能,使用tkinter来实现&#…...

autodl 安装了多个conda虚拟环境 选择合适虚拟环境的语句
1.conda env list 列出所有虚拟环境 可以看到,我有两个虚拟环境,一个是joygen,一个是base conda activate base 或者 conda activate joygen 激活对应的环境。我选择激活 joygen 环境 然后就可以在joygen环境下进行操作了 base环境也是同理…...
【AI工具应用】使用 trae 实现 word 转成 html
假如我们要实现某个网站的《隐私协议》等静态页面,产品给了一个 word 文档,以前我都是手动从 word 文档复制一行的文字,然后粘贴到一个html文件中,还得自己加各种标签,很麻烦。 我们可以使用 trae 等 ai 工具实现 wor…...

ansible-playbook 进阶 接上一章内容
1.异常中断 做法1:强制正常 编写 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…...

趋势直线指标
趋势直线副图和主图指标,旨在通过技术分析工具帮助交易者识别市场趋势和潜在的买卖点。 副图指标:基于KDJ指标的交易策略 1. RSV值计算: - RSV(未成熟随机值)反映了当前收盘价在过去一段时间内的相对位置。通过计算当前…...

基线配置管理:为什么它对网络稳定性至关重要
什么是基线配置(Baseline Configuration) 基线配置(Baseline Configuration)是经过批准的标准化主设置,代表所有设备应遵循的安全、合规且运行稳定的配置基准,可作为评估变更、偏差或未授权修改的参考基准…...
AWS WebRTC:获取ICE服务地址(part 1)
建立WebRTC连接的第二步是获取ICE服务地址。 ICE全称:Interactive Connectivity Establishment,建立互动连接。 ICE 服务地址,主要是 TURN 和 STUN 服务器的地址,用于 WebRTC 在 NAT 网络环境中协商建立连接。 上代码ÿ…...

Nest全栈到失业(一):Nest基础知识扫盲
Nest 是什么? 问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.request 或 https.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios…...

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程
简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡,为千亿规模大语言模型的训练、微调和推理进行了定制优化,结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力,助力人工智能、图形渲染、多媒体、科学计算与物…...

Tesseract OCR 安装与中文+英文识别实现
一、下载 https://digi.bib.uni-mannheim.de/tesseract/ 下载,尽量选择时间靠前的(识别更好些)。符合你的运行机(我的是windows64) 持续点击下一步安装,安装你认可的路径即可,没必要配置环境变…...

Cypress + React + TypeScript
🧪 Cypress + React + TypeScript 组件测试全流程实战:从入门到自动化集成 在现代前端开发中,组件测试 是保障 UI 行为可靠性的重要手段。本文将通过一个 React 项目示例,实战演示如何结合 Cypress + React + TypeScript 实现从零配置到自动化集成的完整测试链路。 一、项…...
每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包
在IP网络中,主机(Host)和路由器接口(Router Interface)都需要分配网络地址(IP地址)。 1. 主机(Host)的IP地址分配 (1) 作用 主机的IP地址用于唯一标识该设备࿰…...
c++第四课(基础c)——布尔变量
1.前言 好,今天我们来学布尔变量(bool),开搞! 2.正文 2.1布尔数据的定义值 布尔数据的定义值,是只有真和假 顺便提一句0是假,非0的数字都是真 不过为了简便 我们一般都用0和1 2.2布尔数…...

第2期:APM32微控制器键盘PCB设计实战教程
第2期:APM32微控制器键盘PCB设计实战教程 一、APM32小系统介绍 使用apm32键盘小系统开源工程操作 APM32是一款与STM32兼容的微控制器,可以直接替代STM32进行使用。本教程基于之前开源的APM32小系统,链接将放在录播评论区中供大家参考。 1…...

Docker-搭建MySQL主从复制与双主双从
Docker -- 搭建MySQL主从复制与双主双从 一、MySQL主从复制1.1 准备工作从 Harbor 私有仓库拉取镜像直接拉取镜像运行容器 1.2 配置主、从服务器1.3 创建主、从服务器1.4 启动主库,创建同步用户1.5 配置启动从库1.6 主从复制测试 二、MySQL双主双从2.1 创建网络2.2 …...
LeetCode - 203. 移除链表元素
目录 题目 解题思路 读者可能出现的错误写法 正确的写法 题目 203. 移除链表元素 - 力扣(LeetCode) 解题思路 使用哨兵节点: 创建一个哨兵节点(dummy),将其next指向原链表头节点 哨兵节点的作用是统一处理所有情况&#x…...

canvas 实现全屏倾斜重复水印
参考: html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…...

vue3项目 前端文件下载的两种工具函数
1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象,通常用于处理文件或大块二进制数据。 注意:js中还有一个二进制数据类型ArrayBuffer,它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置;ArrayBuffer 是存…...
SpringAI系列 - 升级1.0.0
目录 一、调整pom二、MessageChatMemoryAdvisor调整三、ChatMemory get方法删除lastN参数四、QuestionAnswerAdvisor调整Spring AI发布1.0.0正式版了😅 ,搞起… 一、调整pom <properties><java.version>17</java.version><spring-ai.version>...

5.31 day33
知识点回顾: PyTorch和cuda的安装 查看显卡信息的命令行命令(cmd中使用) cuda的检查 简单神经网络的流程 数据预处理(归一化、转换成张量) 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…...
Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件
Vue3 + VTable 高性能表格组件完全指南 前言 VTable 是一个高性能的多维表格组件,专为处理大数据量场景而设计。它支持数十万条数据的快速渲染,提供了丰富的表格功能和良好的用户体验。本文将详细介绍如何在 Vue3 项目中使用 VTable,并解决常见的配置问题。 什么是 VTabl…...
【七. Java字符串操作与StringBuilder高效拼接技巧】
7. java字符串 7.1 API 介绍:应用程序编程接口。在 Java 中,API 指的是 JDK 提供的各种功能类,这些类把底层实现封装好了,我们不用关心内部怎么写的,直接用就行 用 API 帮助文档步骤:以查Random类为例 打…...
题解:洛谷 P12672 「LAOI-8」近期我们注意到有网站混淆视听
设 LGR 存在数量为 x x x,CSP 存在数量为 y y y。 很明显,我们只需要将其中数量较小的一方改没就行了(一个巴掌拍不响)。 每两个字符串可同意进行一次更改,答案为: ⌈ min ( x , y ) 2 ⌉ \left\lce…...

HTML 计算网页的PPI
HTML 计算网页的PPI vscode上安装live server插件,可以实时看网页预览 有个疑问: 鸿蒙density是按照类别写死的吗,手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…...
WIN11+eclipse搭建java开发环境
环境搭建(WIN11ECLIPSE) 安装JAVA JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk24安装eclipse https://www.eclipse.org/downloads/ 注意:eclipse下载时指定aliyun的软件源,后面安装会快一些。默认是jp汉化e…...