SOCKET编程(1):基本概念

基本概念

socket分类

socket提供了**流(stream)数据报(datagram)**两种通信机制,即流socket和数据报socket

流socket基于TCP协议,是一个有序、可靠、双向字节流的通道,传输数据不会丢失、不会重复、顺序也不会错乱

数据报socket基于UDP协议,不需要建立和维持连接,可能会丢失或错乱。UDP不是一个可靠的协议,对数据的长度有限制,但是它的效率比较高

某些应用层协议,出于历史原因,受当时技术和网络条件限制,选择了基于UDP实现,其选择的理由现在很可能已经不再成立了

实时的音视频聊天可能采用的是UDP,这种业务可以接受数据的丢失且不必重传

简单的socket通信流程

在这里插入图片描述

主机字节序和网络字节序

https://www.cnblogs.com/xingguang1130/p/11643446.html

大端、小端字节序

在这里插入图片描述

网络字节序和主机字节序

网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节序采用big endian排序方式

不同的机器主机字节序不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。我们把某个给定系统所用的字节序称为主机字节序(host byte order)。比如x86系列CPU都是little-endian的字节序

由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序

htons(), ntohs(), ntohl(),htonl()函数

ntohs, ntohl, htons,htonl的比较和详解

网络字节序与主机字节序之间的转换函数:**htons(), ntohs(), ntohl(),htonl()**,位于头文件<netinet/in.h>

htons和ntohs完成16位无符号数的相互转换,htonl和ntohl完成32位无符号数的相互转换

htonl()--"Host to Network Long int"     32Bytesntohl()--"Network to Host Long int"     32Byteshtons()--"Host to Network Short int"    16Bytesntohs()--"Network to Host Short int"    16Bytes

在使用little endian的系统中,这些函数会把字节序进行转换

在使用big endian类型的系统中,这些函数会定义成空宏

TCP三次握手与四次挥手

TCP三次握手四次挥手详解

TCP三次握手详解-深入浅出(有图实例演示)

💡 主要是面试时候可能会问,实际编程帮助不大

在这里插入图片描述

TCP报文分包和粘包

分包:发送方发送字符串”helloworld”,接收方却接收到了两个字符串”hello”和”world”

粘包:发送方发送两个字符串”hello”+”wold”,接收方却一次性接收到了"helloworld"

下面的例子中就既有分包也有粘包的情况

服务端:

客户端(127.0.0.1)已连接
接收:这是第1个超级女生,编号001
接收:这是第2个超级女生,编号002这是第3个超级女生,编号003这是第4个超级女生,编号004这是第5个超级女生,编号005这是第6个超级女生,编号006这是第7个超级女生,编号007这是第8个超级女生,编号008这是第9个超级女生,编号009这是第10个超级女生,编号010这是第11个超级女生,编号011这是第12个超级女生,编号012这是第13个超级女生,编号013这是第14个超级女生,编号014这是第15个超级女生,编号015这是第16个超级女生,编号016这是第17个超级女生,编号017这是第18个超级女生,编号018这是第19个超级女生,编号019这是第20个超级女生,编号020这是第21个超级女生,编号021这是第22个超级女生,编号022这是第23个超级女生,编号023这是第24个超级女生,编号024这是第25个超级女生,编号025这是第26个超级女生,编号026这是第27个超级女生,编号027这是第28个超级女生,编号028这是@dq�
接收:第29个超级女生,编号029这是第30个超级女生,编号030这是第31个超级女生,编号031这是第32个超级女生,编号032这是第33个超级女生,编号033这是第34个超级女生,编号034这是第35个超级女生,编号035这是第36个超级女生,编号036这是第37个超级女生,编号037这是第38个超级女生,编号038这是第39个超级女生,编号039这是第40个超级女生,编号040这是第41个超级女生,编号041这是第42个超级女生,编号042这是第43个超级女生,编号043这是第44个超级女生,编号044这是第45个超级女生,编号045这是第46个超级女生,编号046这是第47个超级女生,编号047这是第48个超级女生,编号048这是第49个超级女生,编号049这是第50个超级女生,编号050这是第51个超级女生,编号051这是第52个超级女生,编号052这是第53个超级女生,编号053这是第54个超级女生,编号054这是第55个超级女生,编号055这�@dq�
接收:��第56个超级女生,编号056这是第57个超级女生,编号057这是第58个超级女生,编号058这是第59个超级女生,编号059这是第60个超级女生,编号060这是第61个超级女生,编号061这是第62个超级女生,编号062这是第63个超级女生,编号063这是第64个超级女生,编号064这是第65个超级女生,编号065这是第66个超级女生,编号066这是第67个超级女生,编号067这是第68个超级女生,编号068这是第69个超级女生,编号069这是第70个超级女生,编号070这是第71个超级女生,编号071这是第72个超级女生,编号072这是第73个超级女生,编号073这是第74个超级女生,编号074这是第75个超级女生,编号075这是第76个超级女生,编号076这是第77个超级女生,编号077这是第78个超级女生,编号078这是第79个超级女生,编号079这是第80个超级女生,编号080这是第81个超级女生,编号081这是第82个超级女生,编号082��@dq�

客户端:

发送:这是第51495个超级女生,编号51495
发送:这是第51496个超级女生,编号51496
发送:这是第51497个超级女生,编号51497
发送:这是第51498个超级女生,编号51498
发送:这是第51499个超级女生,编号51499

但是TCP传输数据能保证几点:

  1. 顺序不变,例如发送方发送hello,接收方也一定顺序接收到hello,这个是TCP协议承诺的,因此这点成为我们解决分包和粘包问题的关键
  2. 分割的包中间不会插入其他数据

在实际开发中,为了解决分包和粘包的问题,就一定要自定义一份协议,最常用的方法是:

  • 报文长度+报文内容,如9999helloworld
  • 报文长度ASCII码/或二进制的整数

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

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

相关文章

Powerdesigner导入mysql8之后注释丢失

目录 一、问题描述及解决思路 二、导入的步骤 1.先按正常步骤建立一个物理数据模型 &#xff08;1&#xff09;点击“文件-新建模型” &#xff08;2&#xff09;选择物理模型和数据库 2.从sql文件导入表 &#xff08;1&#xff09;点击“数据库-Update Model from Data…

正则表达式-前瞻和后顾

正则表达式中的前瞻和后顾。 前瞻(Lookahead) 前瞻是一种断言,它会检查在当前位置之后是否存在某种模式,但不会实际匹配该模式。前瞻有两种形式: 正向前瞻 (?pattern) 检查当前位置之后是否存在指定的模式如果存在,则匹配成功,但不会消耗该模式例如 \w(?\d) 将匹配后面跟数…

RAG 场景对Milvus Cloud向量数据库的需求

虽然向量数据库成为了检索的重要方式,但随着 RAG 应用的深入以及人们对高质量回答的需求,检索引擎依旧面临着诸多挑战。这里以一个最基础的 RAG 构建流程为例:检索器的组成包括了语料的预处理如切分、数据清洗、embedding 入库等,然后是索引的构建和管理,最后是通过 vecto…

学习笔记:【QC】Android Q : telephony-phone 模块

一、phone init 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 二、phone MO 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 三、phone MT 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以…

提升工作效率,用ONLYOFFICE打造高效团队协作环境

作为一名深耕技术领域已有六七年的开发者&#xff0c;同时又是断断续续进行技术创作将近六年的一个小小作者&#xff0c;我在工作和日常生活中&#xff0c;使用过各色各样的软件。 而在最近几年&#xff0c;一款名为ONLYOFFICE的开源办公套件逐渐走进并融入我的工作与生活&…

paraview 处理 fluent 计算结果

paraview 处理 fluent 计算结果 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/598032490 希望先生的主页也很有价值&#xff1a;https://www.cnblogs.com/Xiwang-Sun/p/14943429.html

如何在适用于 Linux 的 Visual Studio Code 中使用 .NET 8 上的 FastReport Avalonia

我们将继续撰写有关在各种操作系统上的 Visual Studio Code 中使用 FastReport Avalonia 的系列文章。在本文中&#xff0c;我们将详细分析如何使用 Visual Studio Code IDE 在 Linux 操作系统上运行 FastReport Avalonia。 Avalonia UI 是一个积极用于开发跨平台用户界面的 .…

Hyper-V 管理器安装的ubutun扩容磁盘空间说明

一、删除检查点 首先把这个想要扩容的虚拟机停止掉&#xff0c;然后找到检查点&#xff0c;全删除掉&#xff0c;否则没法编辑这个虚拟磁盘。 二、编辑虚拟磁盘 下面截图中下一步不能点击的&#xff0c;只要删除检查点之后就可以点击了。点击下一步然后选择扩容&#xff0c;然后…

组合模式(结构型)

目录 一、前言 二、透明组合模式 三、安全组合模式 四、总结 一、前言 组合模式(Composite Pattern)是一种结构型设计模式&#xff0c;将对象组合成树形结构以表示“部分-整体”得层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式由以下角色组成…

SpringSecurity源码分析(RemeberMe)

RememberMeServices RememberMeServices 记住我的服务的接口 可以重写实现自己的记住我 public interface RememberMeServices { //建议 org. springframework. security. authentication. RememberMeAuthenticationToken 在大多数情况下使用它&#xff0c;因为它具有相应的身份…

词袋法TFIDF

Tf-idf⽂本特征提取 TF-IDF的主要思想是&#xff1a;如果某个词或短语在⼀篇⽂章中出现的概率⾼&#xff0c;并且在其他⽂章中很少出现&#xff0c;则认为此词或者短语具有很好的类别区分能⼒&#xff0c;适合⽤来分类。TF-IDF作⽤&#xff1a;⽤以评估⼀字词对于⼀个⽂件集或…

OpenAI 发布 AI 生成图片检测器;Meta 推出 AI 广告创意工具;Google 正式发布 Pixel 8a,主打 AI

OpenAI 发布 AI 生成图片检测器 OpenAI 昨日官宣推出专用的 AI 监测工具&#xff0c;用于监测图片是否由其旗下 AI 图片生成工具 DALL-E 生成&#xff0c;准确率高达 98.8%。 不过该公司表示&#xff0c;这个检测工具并非旨在检测 Midjourney 和 Stability 等其他流行生成器生…

安卓使用Fiddler抓包 2024

简介 最近试了一下安卓使用fiddler 抓包&#xff0c;发现https包基本都会丢失。原因是Anandroid 7版本针对ssl安全性做了加强&#xff0c;不认可用户的证书。我们要做的就是把fiddler导出的证书进过处理后放置到系统证书目录下面&#xff0c;这样才能抓包https请求。 这里使用…

https介绍,加密解密(举例+必要性,对称/非对称加密介绍),数字摘要/指纹(介绍,应用(session id,网盘的秒传功能))

目录 https 引入 介绍 加密解密层 介绍 没有绝对的安全 使用ssl的弊端 加密解密 概念 加密 解密 秘钥 举例 现实中 网络中 加密的必要性 常见加密方式 对称加密 特点 非对称加密 特点 数字摘要/指纹 介绍 应用 session id 百度网盘的秒传功能 https …

21_Scala集合_可变数组ArrayBuffer

文章目录 ArrayBuffer1.创建可变数组ArrayBuffer2.增加数据3.删除数据4.修改数据5.查询数据Appendix ArrayBuffer ArrayBuffer可变数组–感觉优点类似于Java的ArrayList 1.创建可变数组ArrayBuffer –请注意下面的mutable import scala.collection.mutable.ArrayBuffer //m…

DuDuTalk:4G桌面拾音设备在银行网点服务场景的应用价值

随着科技的飞速发展&#xff0c;银行业也在不断地寻求创新以提高服务质量和效率。在这个过程中&#xff0c;4G桌面拾音设备作为一种新型的智能设备&#xff0c;其在银行网点服务场景中的应用价值逐渐凸显出来。本文将从多个角度探讨4G桌面拾音设备在银行网点服务场景的应用价值…

英语学习笔记6——What make is it?

What make is it? 它是什么牌子的&#xff1f; make n.&#xff08;产品的&#xff09;品牌名称    v. 制作 区别&#xff1a;model n.&#xff08;产品的&#xff09;型号       n. 模型       n. 模特 make 指的是大的品牌名称&#xff0c; model 是旗下产品…

OpenHarmony 实战开发——南向统一编译的docker镜像来了

由于我自己的南向设备开发平台的需求&#xff0c;我将当前几个不同的 docker 镜像版本进行了整合&#xff0c;经过一段时间的攻关和验证&#xff0c;目前整合已完成&#xff0c;新版本的 Dockerfile 如下&#xff0c;这个不是公共需求&#xff0c;所以没有提交主干&#xff0c;…

Web APIs 学习归纳8---移动端特效

上一节学习了PC端的特效&#xff0c;现在学习移动端的特效。 一、移动端触屏事件 1.1 触屏事件概述 移动端浏览器兼容性较好&#xff0c;我们不需要考虑以前 JS 的兼容性问题&#xff0c;可以放心的使用原生 JS 书写效果&#xff0c;但是移动 端也有自己独特的地方。比如触屏…

容联云孔淼:大模型落地与全域营销中台建设

近日&#xff0c;由金科创新社主办的2024区域性商业银行数智化转型研讨会顺利召开&#xff0c; 容联云产业数字云事业群副总经理、诸葛智能创始人孔淼受邀出席&#xff0c;并分享数智化转型实践经验。 他分享了容联云两大核心产品&#xff0c;“大模型应用容犀Copilot”在金融营…