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

    文章

    1438

    浏览量

    83928
  • 套接字
    +关注

    关注

    0

    文章

    5

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    TCP/IP协议作为互联网通信的基础架构,其核心机制Socket编程承载着全球数据交换的使命。本文将深入剖析这一协议的七层架构、三次握手与四次挥手的精妙设计、流量控制与拥塞控制的动态平衡,以及现代互联网环境下面临的挑战与演进方向。
    的头像 发表于 03-03 17:06 875次阅读

    轻松掌握——LuatOS socket基础知识和应用开发

    对于刚接触LuatOS开发的工程师而言,实现设备联网往往是第一个重要目标,而Socket编程正是实现这一目标的核心技术路径。本文以循序渐进的方式,带领读者从最基础的Socket概念入手,逐步掌握在
    的头像 发表于 01-28 20:07 526次阅读
    轻松掌握——LuatOS  <b class='flag-5'>socket</b>基础知识和应用开发

    飞凌嵌入式ElfBoard-Linux系统中的文件分类

    的主要功能和Windows系统中快捷方式类似,它是指向另一个文件或者目录,符号链接本身不包含数据。6.管道(Pipe)和套接Socket)Linux提供了管道和套接
    发表于 12-09 08:59

    socket是什么

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

    天眼查平台关键搜索企业数据API接口技术指南

    :   GET /open/search/v2/company?keyword={关键}Authorization: Bearer {您的API密钥}   三、请求参数 参数名 类型 必选 说明
    的头像 发表于 11-21 11:48 1013次阅读
    天眼查平台关键<b class='flag-5'>字</b>搜索企业数据API接口技术指南

    rtthread v5.0.1 , at socket使用select函数不能监控多个socket fd的问题,怎么解决?

    我最近使用at socket ,at device 组件创建tcpclient,使用select函数实现,发现select只能监控一个socket fd,监控两个socket fd就不能正常接收
    发表于 10-13 06:05

    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 1460次阅读
    GraniStudio : TCP/IP(<b class='flag-5'>Socket</b>)协议深度剖析

    第二十四章 W55MH32TCP_Client_Multi_Socket示例

    本文讲解了如何在 W55MH32 芯片上使用 8 个 socket 实现 TCP 客户端模式,同时连接 1 个服务器进行数据回环测试,通过实战例程展示了从初始化 socket 到建立连接、数据交互
    的头像 发表于 07-24 16:08 1325次阅读
    第二十四章 W55MH32TCP_Client_Multi_<b class='flag-5'>Socket</b>示例

    【嘉楠堪智K230开发板试用体验】网络收发信息

    。 简单来说,Socket抽象层介于传输层和应用层之间,跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。 套接
    发表于 07-13 08:13

    getsockname是否也需要在内核通过自定义dev来获取啊?

    )); // iface_out.sin_addr. // Step 6: 关闭套接 _eXosip_closesocket(sock_rt); printf(\"[DEBUG] Socket closed
    发表于 06-17 06:09

    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