通俗讲解什么是Socket通讯

news/2024/11/15 5:55:32/

Socket通讯原理

1、什么是Socket?

Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。

Socket是一套用于不同主机之间通信的API,它工作在我们的TCP/IP协议栈之上,可应用于浏览器、手机应用或用于服务器管理的SSH客户端等。

要通过Socket与不同主机建立通信,我们只需要指定主机的IP地址和一个端口号。

  • IP地址用于唯一标志你的网络设备

  • 端口主要用于区分主机上的不同应用(没有端口,操作系统没有办法区分数据到底应该发送到哪一个应用上)

通过Socket我们可以建立一条用于不同主机,不同应用之间的虚拟数据通道,并且它是点对点(应用对应用)的,可以将其比喻为将一条数据线连接在不同应用的插槽上,这也是socket这个名字的由来。

2、Socket的类型

常用的Socket的类型有两种:TCPUDP

2.1 TCP-传输控制协议

特点1:TCP是可靠的,它的底层会自动检测并回传丢失的数据包,因此对于调用者来说,你发送的数据对方一定会接受到。

特点2:发送和接受到的数据顺序是完全一致的,比如你发送了一段字符,对方就一定会原封不动的收到同样的字符串,这也就是为什么说TCP是基于“数据流”的协议。

TCP要求收发数据的双方扮演不同的角色:服务器和客户端。

服务器会被动等待客户端的连接,它自己不会主动发起请求。

2.2 UDP-用户报文协议

UDP以报文(Datagram)为单位来收发数据,并且UDP不会自动回传丢失的数据包,因此不保证数据一定能被对方接受到。

正是因为缺少了这些检查,UDP通常具有更低的延迟并占用更少的系统资源,它也更适合于像视频语音通话这种实时性要求较高的应用。

3、在两端间传数据

通过Socket,我们可以将与某台机子建立连接,如果想要在两端间传份数据:

两端各执行socket()方法,得到fd句柄之后,对于服务端依次执行bind()、listen()、accept()方法,然后坐等客户端的连接请求执行connect()方法,向服务端发起建立连接的请求,连接建立完成后,客户端可以执行send()方法发送消息,服务端可以执行recv()接受消息。

反过来,服务器也可以执行send()发送消息,客户端执行recv()接受消息。

服务端是怎么区分多个客户端的?

客户端发来的数据包上会有源IP地址和端口,以及目的IP地址和端口,这四个元素构成一个四元组,可以用于唯一标记一个客户端。


http://www.ppmy.cn/news/47677.html

相关文章

jar包依赖冲突该怎么解决(IT枫斗者)

jar包依赖冲突该怎么解决(IT枫斗者) maven jar包依赖规则 间接依赖路径最短优先一个项目依赖了a和b两个jar包,其中a-b-c1.0,d-e-c1.0,由于c1.0路径最短,所以项目最后使用的jar包是c1.0pom文件中申明顺序优先有人就问…

linux内核开发第5讲:字符设备驱动的Makefile和驱动的插入和卸载

文章目录 1.Makefile文件2.解析Makefile2.1 Makefile 条件判断2.2 obj-m obj-y2.3 Linux uname 命令2.4 make -C ( K D I R ) M (KDIR) M (KDIR)M(PWD) 3.操作实践3.1 make参数3.2 执行make3.3 清理内核日志3.4 加载驱动3.5 查看驱动3.6 卸载驱动 1.Makefile文件 ifneq ($(K…

TensorFlow 卷积神经网络实用指南:1~5

原文:Hands-On Convolutional Neural Networks with TensorFlow 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象&am…

迅为RK3588核心板平台新增工业级方案

迅为基于瑞芯微RK3588平台,提供商业级、工业级和国产化核心板,工业级板卡温度可达-40度到85度,国产化板卡从内存,存储等每一个元器件全部采用国产物料。不同板卡,满足各个行业需求。 iTOP-3588核心板参数 CPU &#x…

App 抓包提示网络异常怎么破?

背景 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。以“贝壳找房”为例: Fiddler中看到的请求是这样的: 你可能开始找证书的问题:是…

Python项目之中国数据可视化

文章目录 关键词一、做什么二、怎么做1、获取数据&&处理数据2、数据库设计&&存储数据3、开发后端接口4、前端页面编写 三、效果展示四、总结 关键词 PythonDjangoPython网络爬虫echarts可视化阅读者(Python基础、Django基础、H5基础) …

vue3插槽的使用

插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的标签。 1.插槽基本使用 子组件SlotComponent.vue <template><div cla…

【计算机专业应届生先找培训还是先找个工作过渡一下?】

计算机专业应届生先找培训还是先找个工作过渡一下&#xff1f; 计算机应届生是先培训还是先工作&#xff0c;这个问题应该困扰了很多专业技能一般的同学&#xff0c;尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂&#xff0c;技术一般学历优秀的人能…