当前位置: 首页 > news >正文

计算机网络 | 应用层(6) -- 套接字编程

 💓个人主页:mooridy
💓专栏地址:《计算机网络:自顶向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客

💓本博客内容为《计算机网络:自顶向下方法》第二章应用层第七节知识梳理
关注我🌹,和我一起学习更多计算机的知识~
🔝🔝🔝

目录

套接字编程:生成网络应用

基本概念

套接字(Socket)

工作原理

UDP 套接字编程

UDP(用户数据报协议)特点

流程

服务器端流程

客户端流程

TCP 套接字编程

TCP 特点

流程

服务器端流程

客户端流程


套接字编程:生成网络应用

基本概念

套接字(Socket)

就像是不同计算机之间进行通信的 “端点”。每个套接字都有一个对应的 IP 地址和端口号,IP 地址用于标识网络中的计算机,而端口号则用于标识计算机上的特定应用程序。通过 IP 地址和端口号,数据可以准确地从一个套接字传输到另一个套接字。

工作原理

  • 创建套接字:在通信的双方,首先需要创建一个套接字对象。这个套接字对象将作为数据传输的接口。
  • 绑定地址:服务器端需要将套接字绑定到一个特定的 IP 地址和端口号上,以便客户端能够找到它。
  • 监听连接:服务器端套接字开始监听指定端口,等待客户端的连接请求。
  • 建立连接:客户端套接字尝试连接到服务器端的指定地址和端口。服务器端接受连接后,双方就建立了一个通信通道。
  • 数据传输:连接建立后,双方可以通过套接字发送和接收数据。
  • 关闭连接:通信结束后,双方关闭套接字,释放系统资源。

UDP 套接字编程

UDP(用户数据报协议)特点

  • 客户端与服务器之间没有 “连接”,在发送数据之前没有握手过程。
  • 发送方会明确地将目标 IP 地址和端口号附加到每个数据包上。
  • 接收方会从接收到的数据包中提取发送方的 IP 地址和端口号。
  • UDP 传输的数据可能会丢失,或者接收到的数据可能是乱序的。
  • 从应用程序的角度来看,UDP 在客户端和服务器之间提供不可靠的字节组(“数据报”)传输。

流程

服务器端流程
  1. 创建套接字:使用 socket(AF_INET, SOCK_DGRAM) 创建一个 UDP 套接字,AF_INET 表明采用 IPv4 地址族,SOCK_DGRAM 表示这是数据报套接字 。同时指定一个端口号 x ,用于监听客户端发来的数据报。
  2. 读取数据报:服务器通过 serverSocket 等待接收来自客户端的数据报。UDP 数据报是独立的消息单元,服务器从该套接字接收这些单元。
  3. 回复数据报:当服务器接收到客户端的数据报并处理后,要向客户端发送回复。回复时需要指定客户端的地址和端口号,以便客户端能正确接收,回复通过 serverSocket 发送出去。
客户端流程
  1. 创建套接字:同样使用 socket(AF_INET, SOCK_DGRAM) 创建 UDP 套接字,客户端套接字用于与服务器通信。
  2. 发送数据报:客户端创建一个包含目标服务器 IP 地址和端口号 x 的数据报,然后通过 clientSocket 将数据报发送给服务器。在发送数据报时,客户端不需要与服务器提前建立连接。
  3. 读取数据报:客户端从 clientSocket 接收服务器发回的回复数据报。
  4. 关闭套接字:通信完成后,客户端关闭 clientSocket ,释放相关资源。

TCP 套接字编程

TCP 特点

  • 客户端必须与服务器建立联系,服务器进程必须首先处于运行状态,且服务器必须创建一个用于接收客户端连接的套接字(好比一扇 “门”)。
  • 客户端通过创建一个 TCP 套接字,并指定服务器进程的 IP 地址和端口号与服务器建立联系。当客户端创建套接字时,客户端的 TCP 会与服务器的 TCP 建立连接。
  • 当服务器收到客户端的连接请求时,服务器的 TCP 会创建一个新的套接字,供服务器进程与该特定客户端进行通信。这使得服务器能够与多个客户端进行通信,源端口号用于区分不同的客户端。
  • 从应用程序的角度来看,TCP 在客户端和服务器之间提供可靠的、按序的字节流传输(就像一个 “管道”)。

流程

服务器端流程
  1. 创建监听套接字:服务器使用 socket() 创建一个 TCP 套接字,并绑定到特定端口号 x ,这个套接字用于监听客户端的连接请求,就像在门口站岗,等待有人敲门。
  2. 等待连接请求:通过 serverSocket.accept() 方法,服务器进入阻塞状态,一直等待客户端的连接请求。一旦有客户端请求连接,就会创建一个新的套接字 connectionSocket ,专门用于和这个客户端进行通信。这就好比门卫接待访客后,给访客安排一个单独的房间进行交流。
  3. 读取请求与回复:使用 connectionSocket 读取客户端发送过来的请求信息,然后根据请求进行处理,并向 connectionSocket 写入回复信息发送给客户端。
  4. 关闭连接套接字:通信结束后,关闭 connectionSocket ,释放相关资源。不过要注意,serverSocket 一般不会关闭,而是继续监听新的客户端连接请求。
客户端流程
  1. 创建套接字并连接:客户端使用 socket() 创建一个 TCP 套接字,然后通过这个套接字向服务器的指定主机 ID 和端口号 x 发起连接请求,尝试与服务器建立连接。
  2. 发送请求与接收回复:连接建立成功后,客户端通过 clientSocket 向服务器发送请求信息,然后等待并从 clientSocket 读取服务器返回的回复信息。
  3. 关闭套接字:通信完成后,客户端关闭 clientSocket ,释放占用的资源。

编辑

分享

用Python语言编写一个简单的UDP套接字通信程序

详细解释一下在网络编程中IP地址和端口号是如何协同工作的

套接字编程和其他网络编程模型相比有哪些优势和劣势

相关文章:

计算机网络 | 应用层(6) -- 套接字编程

💓个人主页:mooridy 💓专栏地址:《计算机网络:自顶向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 💓本博客内容为《计算机网络:自顶向下方法》第二章应用层第七节知识梳理 关注我&#x1f…...

基于大模型的急性肠套叠全流程预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义与创新点 二、急性肠套叠概述 2.1 定义与分类 2.2 病因与发病机制 2.3 流行病学特征 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 用于急性肠套叠预测的可行性分析 四、术前风险…...

游戏遭遇DDoS攻击如何快速止损?实战防御策略与应急响应指南

是不是很抽象 我自己画的 一、游戏DDoS攻击特征深度解析 游戏行业DDoS攻击呈现复合型特征,2023年监测数据显示,针对游戏服务器的攻击中,63%采用UDP反射放大HTTP慢速攻击组合,攻击峰值达3.2Tbps。攻击者利用游戏协议特性&#xff…...

Linux电源管理(2)_常规的电源管理的基本概念和软件架构

原文: Linux电源管理(2)_Generic PM之基本概念和软件架构 1. 前言 Linux系统中那些常规的电源管理手段,包括关机(Power off)、待机(Standby or Hibernate)、重启(Reboot)等。这些…...

回文链表力扣234

思路: 对于这个题同样的找出题目的要求 1.判断回文 那么我们思考一下判断回文的方法,对于字符串我们只需要翻转一下就行,但是这不是通用的方法,在思考一下,我们是不是可以用双指针,一个在前一个在后,向中…...

互联网的下一代脉搏:深入理解 QUIC 协议

互联网的下一代脉搏:深入理解 QUIC 协议 互联网是现代社会的基石,而数据在其中高效、安全地传输是其运转的关键。长期以来,传输层的 TCP(传输控制协议)一直是互联网的主力军。然而,随着互联网应用场景的日…...

榕壹云国际版短剧系统:基于Spring Boot+MySQL+UniApp的全球短剧创作平台

一、项目背景与简介 在短视频行业高速发展的今天,短剧内容已成为全球用户娱乐消费的新宠。为满足市场对高质量、多样化短剧的需求,我们基于Spring Boot + MySQL + UniApp技术栈开发了榕壹云国际版短剧系统,这是一款面向全球市场的短剧创作与分发平台。系统不仅提供丰富的基…...

为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?

为什么选择 Spring Boot? Spring Boot 的核心目标就是简化 Spring 应用的初始搭建以及开发过程。它并不是要取代 Spring Framework,而是构建在其之上,通过一系列“约定优于配置”的原则和自动化手段,让开发者能够更快的创建出独立…...

方向倒数、梯度和梯度下降的对比关系

一、方向导数与梯度的定义 ‌方向导数‌ 方向导数描述多元函数在某点沿特定方向的变化率。对于函数f(x,y),在点(x0​,y0​)沿单位向量u(u1​,u2​)的方向导数定义为: 其物理意义是函数值沿该方向的瞬时变化速率,正负表示增减趋势&#xff0c…...

全星APQP软件系统:驱动芯片半导体行业研发管理迈向高效与合规新高度

全星APQP软件系统:驱动芯片半导体行业研发管理迈向高效与合规新高度 在芯片半导体行业,一款芯片的研发周期长达数年,涉及设计验证、工艺开发、良率爬坡、量产交付等数百个关键节点,任何一个环节的偏差都可能导致数千万美元的损失…...

文章记单词 | 第50篇(六级)

一,单词释义 fun:英 [fʌn] 美 [fʌn],名词,意为 “享乐;乐趣;快乐;嬉戏;有趣的事;玩笑;逗乐”;形容词,意为 “逗乐的;有…...

RISC-V MCU定时器架构与低功耗设计

RISC-V核低功耗MCU在定时器架构和功耗控制方面具有以下特点: 定时器配置 高级控制定时器:支持互补PWM输出和刹车功能,适合电机控制等场景 通用定时器:提供输入捕获、输出比较和单脉冲模式等基础功能 系统定时器:内置6…...

redis_Windows中安装redis

①Windows安装包下载地址:https://github.com/tporadowski/redis/releases 当前最新版本截图 ②根据自己系统平台的实际情况选择对应的安装包,如:64位win10系统可选择Redis-x64-5.0.14.msi ③下载完成后运行安装,没有特殊要求的话…...

Spring中生成Bean的方式总结-笔记

1. 概略版 Spring生成Bean方式有如下几种,可根据需求选择合适的方式,通常优先使用注解驱动的声明式配置(如Component、Bean),复杂场景结合条件或作用域控制。 方式特点适用场景Component 组件扫描简单直观&#xff…...

学习insightface 的人脸识别

1.Insightface_pytorch版本的自定义数据准备过程 https://github.com/artintel/LearningCode/blob/master/insightface_pytorch_datasets_make/README.md https://github.com/artintel/LearningCode/tree/master/insightface_pytorch_datasets_make 2.mxnet_insightface开源…...

【MQ篇】RabbitMQ之消费失败重试!

目录 引言:消息不丢是底线,失败了优雅重试是修养!消费失败了,为啥不能老是原地复活?🤔智能重试策略一:本地重试(Spring Retry 的魔法)🏠✨智能重试策略二&…...

权力结构下的人才价值重构:从 “工具论” 到 “存在论” 的转变​

引言​ 在现在的公司管理里,常常能听到这样一种说法:“我用你,你才是人才;不用你,你啥都不是。” 这其实反映了一种很常见的评判人才价值的标准,就是只看公司的需求,把人才当作实现公司目标的工…...

【上位机——MFC】视图

相关类 CView及其子类,父类为CWnd类,封装了关于视图窗口的各种操作,以及和文档类的数据交互。 视图窗口的使用 1.定义一个自己的视图类(CMyView),派生自CView,并重写父类成员纯虚函数OnDraw。 2.其余框架类和应用程…...

Unity:Sprite Shapes(精灵形状)

游戏世界的基本构建单位——精灵(Sprite) Sprite(精灵)是什么? Sprite指的是一张小图片,在游戏里代表一个角色、道具、背景元素。 在2D游戏里,比如滑雪游戏,角色、小树、雪地……很…...

火语言RPA--钉钉群通知

【组件功能】:向钉钉群发送文本或markdown消息 在钉钉群创建自定义机器人(Webhook),在组件配置Webhook地址、密钥、文本内容即可向钉钉群发送文本或markdown消息,还可以at群成员或所有人。 配置预览 配置说明 Webho…...

详细图解 Path-SAM2: Transfer SAM2 for digital pathology semantic segmentation

✨ 背景动机 数字病理中的语义分割(semantic segmentation)是非常关键的,比如肿瘤检测、组织分类等。SAM(Segment Anything Model)推动了通用分割的发展,但在病理图像上表现一般。 病理图像(Pa…...

驯龙日记:用Pandas驾驭数据的野性

引言:为什么选择Pandas? "NumPy是手术刀,Pandas是急救箱" 手术刀(NumPy):精密的数值计算 急救箱(Pandas):处理现实数据的全套工具 维度NumPy数组Pandas Se…...

产品经理面经(1)

今天开一个新的栏目,是关于产品经理方面的。产品经理这个岗位每年的需求都是不少的,尤其是近年来AI的兴起造就了产品经理与AI方面深度融合从而催生了“AI产品经理”这种类型的岗位。具体数据如下 总体规模: 2020 年:受疫情影响&am…...

【黑马JavaWeb+AI知识梳理】前端Web基础02 - JS+Vue+Ajax

JS(行为/交互效果) JavaScript(JS)跨平台、面向对象,是用来控制网页行为,实现页面交互效果的脚本语言。 和Java完全不同,但基础语法类似。 组成: ECMAScript:规定了JS…...

Unity Post Processing 小记 【使用泛光实现灯光亮度效果】

一、前言 本篇适用于Unity 2018 - 2019及以上版本,以默认渲染管线为例。文章内容源于个人研究尝试与网络资料收集,可能存在不准确之处。初衷是因新版本制作时老的Bloom插件失效,经研究后分享开启Bloom效果的方法。若在项目中使用Post Proces…...

NFC 碰一碰发视频贴牌技术,音频功能的开发实践与技术解析

在数字化营销与信息交互场景中,NFC 碰一碰技术凭借其便捷性和高效性,成为快速传递多媒体内容的新选择。通过 NFC 实现视频音频的快速传输,不仅能提升用户体验,还能为各类场景带来创新应用。本文将深入探讨该功能开发过程中的关键技…...

新型“电力寄生虫“网络钓鱼攻击瞄准能源企业与知名品牌

本周发布的综合威胁报告显示,自2024年以来,一场名为"电力寄生虫"(Power Parasites)的复杂网络钓鱼活动持续针对全球能源巨头和知名品牌展开攻击。 该攻击活动主要通过精心设计的投资骗局和虚假招聘信息,冒用…...

如何将数据输入到神经网络中

引言 在前面的文章学习中,我们初步了解到神经网络在人工智能领域扮演着至关重要的角色,它具备实现真正人工智能的潜力。真正的人工智能意味着机器能够像人类一样进行感知、学习、推理和决策等复杂活动。而神经网络作为实现这一目标的关键技术&#xff0c…...

【quantity】2 Unit 结构体(unit.rs)

一、源码 下面代码实现了一个基于类型级别的物理量单位系统,使用Rust的类型系统在编译期保证单位运算的正确性。 use typenum::{Integer, Sum, Diff, Z0, // 0P1, P2, P3, P4, // 1, 2, 3, 4N1, N2, N3 // -1, -2, -3 }; use std::marker::PhantomData; use st…...

OpenCV 图形API(66)图像结构分析和形状描述符------将一条直线拟合到三维点集上函数fitLine3D()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 拟合一条直线到3D点集。 该函数通过最小化 ∑iρ(ri) 来将一条直线拟合到3D点集,其中 ri 是第 i 个点与直线之间的距离,…...

uniapp: 低功耗蓝牙(BLE)的使用

在微信小程序中实现蓝牙对接蓝牙秤的重量功能,主要依赖微信小程序提供的低功耗蓝牙(BLE)API。以下是一个清晰的步骤指南,帮助你完成从连接蓝牙秤到获取重量数据的开发流程。需要注意的是,具体实现可能因蓝牙秤的协议和…...

谢飞机的Java面试之旅:从Spring Boot到Kubernetes的挑战

场景:互联网大厂Java求职 在一家知名互联网大厂的面试现场,严肃的面试官坐在谢飞机的对面,开始了面试。 第一轮:基础技术与平台 面试官: 谢先生,您能简单介绍一下Java SE 8的主要新特性吗? 谢飞机: 当然,Java 8引入了Lambda表达式、Stream API和新的日期时间API。 …...

Shadertoy着色器移植到Three.js经验总结

Shadertoy是一个流行的在线平台,用于创建和分享WebGL片段着色器。里面有很多令人惊叹的画面,甚至3D场景。本人也移植了几个ShaderToy上的着色器。本文将详细介绍移植过程中需要注意的关键点。 1. 基本结构差异 想要移植ShaderToy的shader到three.js&am…...

基于BenchmarkSQL的OceanBase数据库tpcc性能测试

基于BenchmarkSQL的OceanBase数据库tpcc性能测试 安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQLBenchmarkSQL props文件配置数据库和测试表配置BenchmarkSQL压测装载测试数据TPC-C压测(固定事务数量)TPC-C压测(固定时长)生成测试报告重复测试流程梳理安装Benchmar…...

Flutter 泛型 泛型方法 泛型类 泛型接口

目录 泛型简单使用 泛型类的简单使用 泛型接口的使用 通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验) 泛型简单使用 main(){print(getData2("XXX"));getData2<String>("XXX");getData2<int>(1);}Str…...

边缘函数:全栈开发的最后1毫秒性能革命

一、边缘计算的时空折叠术 1. 传统CDN vs. 智能边缘网络 全球电商平台实测数据&#xff1a; 场景云端处理延迟边缘处理延迟转化率提升搜索建议320ms8ms18%个性化推荐450ms12ms27%实时库存检查680ms9ms42%欺诈检测920ms15ms63% 二、边缘全栈架构的量子纠缠 1. 代码的时空分布…...

网店专用版批量转账系统,覆盖淘宝、拼多多、抖店订单信息自动核对+插旗自动备注,支持微信支付宝批量转账

不少电商人在运营过程中&#xff0c;需要用转账工具来解决日常运营过程中的返款问题。 但在实际操作过程中&#xff0c;往往有很多问题。东哥在这里梳理下&#xff0c;方便大家了解&#xff1a; 1.错返/漏返的情况时有发生 为什么会错返和漏返&#xff1f; 实际来看&#x…...

AUTOSAR_RS_ClassicPlatformDebugTraceProfile

AUTOSAR经典平台调试、跟踪与分析支持 AUTOSAR组件调试、跟踪与分析功能详解 目录 简介ARTI核心扩展 核心特定ARTI扩展结构核心参数定义 操作系统和任务扩展 OS特定ARTI扩展任务特定ARTI扩展软件组件特定扩展 总体架构 组件结构接口定义 错误处理 默认错误跟踪器(DET) 总结 1.…...

vue中将html2canvas转成的图片传递给后台 Python Flask 服务

下面将详细介绍如何在 Vue 项目里把 html2canvas 转换得到的图片传递给后台的 Python Flask 服务。 前端&#xff08;Vue&#xff09;步骤 1. 安装依赖 首先要确保已经安装了 html2canvas 和 axios&#xff0c;若未安装&#xff0c;可在终端执行以下命令&#xff1a; npm i…...

基于深度学习的智能交通流量监控与预测系统设计与实现

基于深度学习的智能交通流量监控与预测系统设计与实现 摘要 随着城市化进程的加速和机动车保有量的激增&#xff0c;交通拥堵、事故频发、环境污染等问题日益严峻&#xff0c;对传统的交通管理方式提出了巨大挑战。智能交通系统&#xff08;ITS&#xff09;作为解决这些问题的…...

鸿蒙系统应用开发全栈指南

一、开发环境搭建与工具链配置 1. DevEco Studio深度解析 作为鸿蒙生态的官方IDE&#xff0c;DevEco Studio 4.2版本已集成ArkTS 3.0编译器与AI代码助手功能。安装过程需注意&#xff1a; 系统要求&#xff1a;Windows 10 21H2或macOS Monterey以上环境依赖&#xff1a;Node…...

STC32裸机项目集成FreeRTOS的实战问题解析

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…...

振弦式应变计在混凝土结构长期监测中的应用与特点 久岩传感 GEO-explorer

振弦式应变计在混凝土结构长期监测中的应用与特点 久岩传感 GEO-explorer 振弦式应变计是一种专为长期埋设于水工建筑物及各类混凝土结构内部而设计的测量仪器&#xff0c;可广泛应用于梁体、柱体、桩基、挡土墙、隧道衬砌、桥墩及基岩等结构的应变与应力监测&#xff0c;同时具…...

AVFormatContext 再分析

说明 &#xff1a;将 avfromatContext 的变量依次打印分析&#xff0c;根据ffmpeg 给的说明&#xff0c;猜测&#xff0c;结合网上的文章字节写测试代码分析。 从常用到不常用依次分析 1. unsigned int nb_streams; 代表 avfromatContext 中 AVStream **streams 的个数 /** …...

力扣hot100,739每日温度(单调栈)详解

时隔多久又遇到单调栈的题了&#xff0c;上次记得是接雨水的题&#xff0c;简单讲一下单调栈的适用场景和定义。 意义:看名字就知道单调栈是一个栈里面的数据是单调的 。 解决问题: 单调栈主要用于解决需要**快速找到某个元素附近更大或更小的元素**的问题&#xff0c;其核心…...

怎么检测代理IP延迟?如何选择低延迟代理?

在跨境电商、数据采集以及社交媒体管理等活动中&#xff0c;代理IP的延迟是评估其性能的关键指标之一。高延迟的代理IP可能显著影响任务效率&#xff0c;特别是在需要高并发或大量请求的情况下。本文将介绍几种测试海外代理IP延迟的方法。 一、使用Ping命令测试延迟 Ping命令…...

QEMU 10.0 发布

QEMU 10.0 于 2025 年 4 月 23 日发布。此版本包含 2800 多个提交&#xff0c;来自 211 位作者。以下是一些主要的更新内容&#xff1a; CPU 和主板支持增强 x86 架构&#xff1a;优化了字符串操作指令&#xff0c;显著缩短启动时间。新增了 Intel Clearwater Forest 和 Sierra…...

C++和Java该如何选择?

我真诚的建议你选择C。因为国内Java程序员内卷太严重了&#xff0c;某些公司发布一个Java岗位&#xff0c;立刻就有几百人打招呼&#xff1b;而发布一个C岗位&#xff0c;打招呼的人数就那么十几个。 要知道&#xff0c;无论什么时候&#xff0c;只要你能够学得动C&#xff0c…...

Javase 基础入门 —— 06 final + 单例

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 final 关…...

web 开发中,前端部署更新后,该怎么通知用户刷新

web 开发中&#xff0c;前端部署更新后&#xff0c;该怎么通知用户刷新&#xff1f; 浏览器为什么存在刷新按钮&#xff1f;&#x1f518; 因为需要重新加载js&#xff0c;css&#xff0c;html。但为何需要重新加载这些东西&#xff1f;直白点说这些东西其实就是一个文档&…...