网络编程1_网络编程引入

news2025/7/22 4:01:48

为什么需要网络编程?

用户再在浏览器中,打开在线视频资源等等,实质上说通过网络,获取到从网络上传输过来的一个资源。

与打开本地的文件类似,只是这个文件的来源是网络。相比本地资源来说,网络提供了更为丰富的网络资源。

所谓网络资源 ,其实就是在网络中获取到各种数据资源。而所有的网络资源,都是通过网络编程来进行数据传输。

什么是网络编程

网络编程:网络上的主机,通过不同的进程,以编程的方式实现网络通信(网络数据传输)。

也可以只需要满足进程不同即可。所以即使是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。

特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。

但是,我们一定要明确,我们的目的是使网络上的不同主机,基于网络来传输数据资源。

进程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的绑定端口,换为其他没有使用的端口。

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

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

相关文章

【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.引言 刚刚回顾了前面几篇博客,感觉写的内容倒是很详细,每个知识点都做了说明。但是感觉在知识组织…

云原生安全基石:Kubernetes 核心概念与安全实践指南

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. Kubernetes 架构全景 Kubernetes(简称 K8s)采用主从架构,由控制平面(Control Plane&…

autodl 安装了多个conda虚拟环境 选择合适虚拟环境的语句

1.conda env list 列出所有虚拟环境 可以看到,我有两个虚拟环境,一个是joygen,一个是base conda activate base 或者 conda activate joygen 激活对应的环境。我选择激活 joygen 环境 然后就可以在joygen环境下进行操作了 base环境也是同理…

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)是经过批准的标准化主设置,代表所有设备应遵循的安全、合规且运行稳定的配置基准,可作为评估变更、偏差或未授权修改的参考基准…

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 实现从零配置到自动化集成的完整测试链路。 一、项…

第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 …

canvas 实现全屏倾斜重复水印

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

vue3项目 前端文件下载的两种工具函数

1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象&#xff0c;通常用于处理文件或大块二进制数据。 注意&#xff1a;js中还有一个二进制数据类型ArrayBuffer&#xff0c;它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置&#xff1b;ArrayBuffer 是存…

5.31 day33

知识点回顾&#xff1a; PyTorch和cuda的安装 查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; cuda的检查 简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09; 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…

HTML 计算网页的PPI

HTML 计算网页的PPI vscode上安装live server插件&#xff0c;可以实时看网页预览 有个疑问&#xff1a; 鸿蒙density是按照类别写死的吗&#xff0c;手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…

MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建|文献速递-深度学习医疗AI最新文献

Title 题目 MMR-Mamba: Multi-modal MRI reconstruction with Mamba and spatial-frequency information fusion MMR-Mamba&#xff1a;基于 Mamba 和空间频率信息融合的多模态 MRI 重建 01 文献速递介绍 磁共振成像&#xff08;MRI&#xff09;因其无创、无辐射特性以及…

2.5/Q2,Charls最新文章解读

文章题目&#xff1a;Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI&#xff1a;10.1186/s12876-025-03943-7 中文标题&#xff1a;抑郁症状的轨迹和慢性肝病风险&#xff1a;来自 CHARLS 的证据 发表杂志&#xff1a;BM…

Unity QFramework 简介

目录 什么是MVC模式&#xff1f; QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层&#xff1a;表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…