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

    文章

    1253

    浏览量

    78192
  • 套接字
    +关注

    关注

    0

    文章

    4

    浏览量

    1830
收藏 人收藏

    评论

    相关推荐

    HarmonyOS 网络管理开发 —Socket 连接

    简介 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/TLS 协议。 基本概念 ​ ● Socket套接字,就是对网络中不同主机上的应用进程之间进行双
    的头像 发表于 02-18 09:20 464次阅读

    常见的socket三种类型

    常见的socket三种类型  Socket是计算机网络中常用的通信机制,在网络编程中起到了非常重要的作用。Socket可以分为三种类型:流套接字(Stream
    的头像 发表于 12-08 11:18 1481次阅读

    Socket 网络编程框架介绍

    Socket 网络编程框架 Socket套接字)是一个网络编程概念,描述了一个通信端点(Endpoint),用于建立网络连接(Connection)并传输数据。 Linux Kernel 提供
    的头像 发表于 11-09 14:19 288次阅读
    <b class='flag-5'>Socket</b> 网络编程框架介绍

    网络套接字系统调用如何到达sys_socketcall

    //将socket定义为accept # define _socket _libc_accept # define NARGS 3 //系统调用的个数 # include //这几个套接字函数的通用实现
    的头像 发表于 07-24 11:35 377次阅读

    网络系统调用网络套接字入口函数

    网络套接字入口函数 //所有的网络套接字系统调用函数(socket bind listen connect )都使用一个共同的入口函数:sys_socketcall /* 第一个参数call表示
    的头像 发表于 07-24 11:02 251次阅读

    ESP2866如何安装以及从何处获取此“套接”库文件?

    我想使用下面的便携式睡眠方法来测试一些传感器。我如何安装以及从何处获取此“套接”库文件?我正在运行 LUA5.1.4、LuaLoader 和 ESP2866。对于新手问题,我深表歉意,但我在谷歌上
    发表于 06-09 08:45

    如何在iMXRT1176上的LwIP中使用TCP套接

    使用原始 API) 2) OS模式可以使用Socket API和Raw API 3) lwip_ping_freertos 示例使用套接 API 我的问题是,在创建套接
    发表于 06-02 10:10

    ArduinoWebSockets + android应用程序无法让套接工作怎么解决?

    为此苦思冥想,无法弄清楚为什么套接不向 ESP8266 发送数据,反之亦然。附带说明一下,我将我的 PC 连接到 ESP 并输入 192.168.4.1:81/****,我得到了回复“这只是一个
    发表于 06-01 12:46

    88w9098如何配置/修改套接缓冲区大小?

    我想知道如何在驱动程序中配置套接缓冲区大小?我正在使用 88w9098 芯片。 我正在做一些实验。我已经在内核中更改了套接缓冲区大小,因此我可能还需要更改 Wi-Fi 驱动程序端的
    发表于 05-31 11:00

    什么是Socket连接?与TCP连接有什么关系?

    软件抽象层,它是一组接口。 Socket连接是计算机网络中的一种通信机制,它允许两个程序在不同计算机上通过网络进行通信。在使用套接字进行通信时,一个程序作为客户端,另一个程序作为服务器端,它们通过创建和使用套接字进行数据传输。
    的头像 发表于 05-23 11:43 377次阅读

    如何在esp8266中编写简单的基于套接的程序?

    想在 esp8266 中编写简单的基于套接的程序。在 lwipopts.h 中设置标志 LWIP_SOCKET = 1 时出错
    发表于 05-23 09:58

    基于Socket的UDP和TCP编程解析 2

    流,TCP套接口是字节流套接口(stream socket)的一种。 UDP:用户数据报协议。UDP是一种无连接协议。UDP套接口是数据报套接
    的头像 发表于 05-18 17:22 431次阅读
    基于<b class='flag-5'>Socket</b>的UDP和TCP编程解析 2

    基于Socket的UDP和TCP编程解析 1

    流,TCP套接口是字节流套接口(stream socket)的一种。 UDP:用户数据报协议。UDP是一种无连接协议。UDP套接口是数据报套接
    的头像 发表于 05-18 17:22 699次阅读
    基于<b class='flag-5'>Socket</b>的UDP和TCP编程解析 1

    如何让两个ESP8266通过WiFi(TCP套接)进行通信?

    每次在 loop() 函数中连接到服务器来解决这个问题,但是这会大大减慢进程。 所以简而言之,我的问题是如何让两个 ESP8266 通过 WiFi(TCP 套接)进行通信?
    发表于 05-16 06:44

    lpc54s018套接创建失败的原因?

    我正在使用lpc54s018我正在尝试创建套接编程但是我发现套接创建失败所以请帮助我这是什么主要原因
    发表于 04-04 08:44