0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Socket套接字的原理说明

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-06-18 19:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。

生成套接字主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输 层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Socket以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。

pYYBAGKts-eAKn0ZAAD_l5ZPZxg590.png

Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。

要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连 接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客 户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

socket通信流程:

1、服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket
2、服务器为socket绑定ip地址和端口号
3、服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开
4、客户端创建socket
5、客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
6、服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求
7、客户端连接成功,向服务器发送连接状态信息
8、服务器accept方法返回,连接成功
9、客户端向socket写入信息
10、服务器读取信息
11、客户端关闭
12、服务器端关闭

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1418

    浏览量

    83017
  • 套接字
    +关注

    关注

    0

    文章

    5

    浏览量

    2048
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    socket是什么

    Socket(套接)是计算机网络中的一个概念,它指示了一个可以进行网络通信的软件端点。通过使用Socket,计算机程序可以通过网络进行通信。Soc
    发表于 12-03 08:27

    ESP8266 socket通信,串口溢出怎么解决?

    1、硬件平台:原子精英板 stm32f103zet6+esp8266 开发板作为client,网络调试助手模拟server 学习研究AT SOCKET有一段时间了,之前逛论坛提问解决了一些问题。遇到
    发表于 09-28 13:42

    alloc_socket在不断创建socket时会不断新建信号量和互斥锁,导致内存泄漏,怎么解决?

    alloc_socket在不断创建socket时会不断新建信号量和互斥锁,导致内存泄漏。 修改前: static struct wiz_socket *alloc_socket(vo
    发表于 09-10 08:22

    请问at_device不用at socket能使用bsd socket吗?

    at_device不用at socket能使用bsd socket吗?
    发表于 09-10 08:04

    【HZ-RK3568开发板免费体验】基于 Select Poll的TCP发服务器

    模型: socket(...); // 创建套接 bind(...);// 绑定 listen(...); // 监听 while(1) { if(select(...) > 0
    发表于 08-19 22:01

    GraniStudio : TCP/IP(Socket)协议深度剖析

    Socket)客户端与服务器模块,通过高度封装的可视化功能,将复杂的套接通信逻辑转化为简单的 “拖拽式” 操作,为工业用户构建稳定、高效的网络通信系统提供了强大支撑。本文将从技术原理、功能实现、应用场景三个维度,深入解析 G
    的头像 发表于 08-03 22:20 896次阅读
    GraniStudio : TCP/IP(<b class='flag-5'>Socket</b>)协议深度剖析

    01studio 1.2.2 01studio 1.2.0镜像版本 socket无法使用怎么解决?

    (ai)addr = ai[0][-1]# 获取第一个地址的sockaddr# 创建并连接套接s = socket.socket(socket.AF_INET,
    发表于 06-06 08:04

    CYUSB2014-BZXC USB端点编号的对应关系是什么?

    你好客服, 我对 CYUSB2014-BZXC 有疑问。 应用说明(AN68829)第 6 页解释了线程和套接的概念,但我不明白它们如何与 USB 端点编号相对应。 既然 CYUSB2014 支持 32 个端点,那么逻辑插座
    发表于 05-21 06:14

    FX3 Socket缓冲区切换的最大时间是多少?

    中说“套接在填充或清空 DMA 缓冲区后,需要一段有限的时间(最多几微秒)才能从一个 DMA 描述符切换到另一个 DMA 描述符”(第 14 页)并且“如果外部外围设备在套接从内存
    发表于 05-16 07:51

    为什么cyu3socket.c中的CyBool_t CyU3PDmaSocketIsValid (uint16_t sckId) 使CY_U3P_CPU_SOCKET_PROD无效?

    指定以下 DAM IP 和套接
    发表于 05-13 07:26

    CPU Socket的基本结构和工作原理

    CPU Socket是连接中央处理单元(CPU)与计算机主板之间的关键部件,它充当着传递电信号、电源和散热等多重功能的枢纽。在整个计算机系统中,CPU Socket的作用至关重要,尤其在高性能计算
    的头像 发表于 05-08 17:14 1890次阅读

    在KaihongOS应用开发中,如何利用Socket进行数据传输

    TCPSocketServer 对象。 绑定本地 IP 地址和端口,监听并接受与此套接建立的客户端 TCPSocket 连接。 订阅 TCPSocketServer 的 connect 事件,用于监听客户端的连接
    发表于 05-08 07:25

    一文了解Android UDP通信

    、UDP通信步骤 通信部分得分为两步,一个是服务端,一个是客户端 服务端步骤: 1.创建套接: 1.使用socket()函数创建一个UDP套接
    发表于 12-30 10:56

    百问FB网络编程 - UDP编程简单示例

    6.5 UDP编程简单示例 ​UDP服务器首先进行初始化操作:调用函数socket创建一个数据报类型的套接,函数bind将这个套接与服务
    发表于 12-10 09:46

    百问FB网络编程 - TCP编程简单示例

    6.4 TCP编程简单示例 ​服务器首先进行初始化操作:调用函数socket创建一个套接,函数bind将这个套接与服务器的公认地址绑定在
    发表于 12-10 09:43