02 socket套接字编程---udp服务端和客户端

      最后更新:2022-04-05 00:05:17 手机定位技术交流文章

      文章目录

      • 一、理解网络通信
      • 二. 对《贸易协定》和《联合民主党协定》的初步理解
        • 二.一. TCP议定书
        • 二、二、二、关于联合民主党的协定
      • 三、网络字节序
        • 3 和 1。 从主机到网络的字节(主机到网络)
        • 二、三、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、一、二、二、二、二、二、二、二、二、二、三、三、二、二、二、二、二、二、二、二、二、二、二、二、二、二
      • 四. 插座编程接口
        • 四.一. 索卡迪尔的结构
          • 一. 四. 四. 一. 四. 一. 四. 四. 填充结构参数
        • 四、二. 此函数生成套接字文件描述符 。
        • 3,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
          • Four. Three. Three.three.three.three.three.three.three.three.three.three.为什么当客户没有时服务器必须被绑起来?
        • 十四. UDP 接收器接口
          • 1,4,4,4,1,4,4,1,4,4,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          • 四、四、二、四、四、四、四、四、四、四、四、四 发送功能
      • 五. 客户和跨网络 UDP服务
        • 5.1. 服务端
        • 5.2. 客户端
        • 5.3. 实验现象

      一、理解网络通信

      我们需要做的就是启动软件(连接互联网)。比如游览器,当打开软件之时,另一方面,硬盘数据可以装入内存。关于客户,客户程序已经开始。在服务器上,同样也有类似的服务器程序。客户端程序然后为相关服务器程序搜索网络。进行数据的交互。这的精髓是过程沟通。
      在此情况下,ip确定公共网络中唯一的主机,端口号确定主机中唯一的网络程序,因此ip+port是网络中的唯一程序,即流程之间的通信。

      这些合成是 ip+port, 这表明合成基本上是 过程间通信。

      通信需要双方对相同的公共资源,即网络有如下看法:
      在这里插入图片描述
      在这里插入图片描述

      二. 对《贸易协定》和《联合民主党协定》的初步理解

      传输层协议的数据组成部分(TCP和UDP)有两个端口号,称为源码和目的地端口号,称为“谁发送了数据,谁发送了数据”。

      二.一. TCP议定书

      连接、可靠通信、字节流

      以连接为导向:在提供数据之前,两次TCP通信都必须建立连接。
      TCP确保发送的数据以可靠和有条不紊的方式送达另一端。
      面向字节流:

      1. 所传输数据之间没有明显的数据界限(例如,接收者不能说明是先发送的(第一个是123个,第二个是456个)。
      2. 对于接收器,任何字节都可接收数据(例如,12345次)。

      在这里插入图片描述

      由于TCP是可靠的传输层协议,必须解决更多的问题,例如数据是否会丢失,如何处理,因此TCP协议将变得更加复杂,效率降低。

      二、二、二、关于联合民主党的协定

      特征:互不相连、不可信、注重数据

      无需连接: UDP 通信在提供数据前不需要连接,客户只需知道服务IP 地址和端口号即可立即发送数据。
      不可靠性:不能保证数据会到达目的地,并且会按顺序(例如,提前送一份,提前送两份)到达。
      UDP是传输层和应用层数据通信的完整数据传输协议。

      在这里插入图片描述

      由于DUP只是负责数据传输,不能保证数据的安全发送,因此UDP协议更简单、效率更高。

      三、网络字节序

      虽然有些系统本地的字节以小字节为单位,而其他则以大字节为单位,但网络间协议使用大字节发送数据,以保持传输顺序的一致性。

      这意味着,每当一个小机器发送数据时,数据必须转换成一个大字节序列,而发送到终端机器的数据默认是一个大字节序列。
      在这里插入图片描述

      1. 通常情况下,传送器主机将数据从缓冲区发送,按低至高内存的顺序排列。
      2. 接收器将从网络收到的字节储存在接收缓冲区内,按存储存储地址从低到高的顺序排列。
      3. 因此,网络数据流的地址应表明,首先发送的数据是低地址提供的数据(与大端中的高字节相对应),然后发送的数据是高地址(与大端中的低字节相对应)。
      4. 根据TCP/IP协议,网络数据流应当遵循一个大字节序列,即低地址的字节,不论主机大小,数据将在TCP/IP指定的网络字节序列中传输/接收;如果预先交付的发送者小,数据必须转换为大端;否则,数据将被忽略并直接发送。

      3 和 1。 从主机到网络的字节(主机到网络)

      2个字节uint16_t htons(uint16_t hostshort)
      4个字节uint32_t htonl(uint32_t hostlong)

      二、三、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、二、一、二、二、二、二、二、二、二、二、二、三、三、二、二、二、二、二、二、二、二、二、二、二、二、二、二

      2个字节uint16_t ntohs(uint16_t netshort);
      4个字节uint32_t ntohl(uint32_t netlong);

      这些函数名称是明确的: h 表示主机, n 表示网络, I 表示32 位长整数, s 表示16 位短整数。
      例如,Htonl表示将32位长整数值从主机字节转换为网络字节顺序,例如将IP地址转换为传输。
      如果主机是一个小字节序列, 这些方法将把参数转换为适当的结尾和返回大小 。
      如果主机是一个大端字节序列,这些方法不会转换,而是按原样返回参数。

      在这里插入图片描述

      四. 插座编程接口

      四.一. 索卡迪尔的结构

      操作系统旨在建立一套接口,使不同组别之间能够进行交流(然后在提到接口时将其转移到一个共同结构)。在联系之前,您必须交换IP地址和端口号。因此,必须确定一个结构,以保存其自身的知识产权地址和港口号。

      在这里插入图片描述

      • Netinet/ in 定义 IPv4 和 IPv6 地址格式。 hh 中, IPv4 地址以 sockaddr_ in 结构表示, 包括 16 个地址类型、 16 个端口 和 32 个 IP 地址 。
      • IPv4 和 IPv6 地址类型由常数 AF_INET 和 AF_INET 6 定义。 在这种方法中,只要检索到某个袜子结构的初始地址,地址类型字段就可以确定结构的内容,而不必知道这是哪种袜子结构。
      • 锁链 API 可能都以静态袜子* 类型的形式表示,在使用时必须强制转换为袜子;好处是程序兼容性,因为应用程序可以接受 IPv4 IPv6, 以及许多UNIX Domain Socket形式的袜子结构指导 。
        在这里插入图片描述

      一. 四. 四. 一. 四. 一. 四. 四. 填充结构参数

      在这里插入图片描述

      在这里插入图片描述

      • 当我们使用 IPv4 中的 IP 协议时, 我们必须写入网络协议, 并绑定地址信息 。 我们还必须填写 strutct sockaddr_ in 结构, 以保存服务器的 IP 和收听器端口 。
      • 在使用绑定功能之前,必须先将构件袜子结构转换为构件袜子结构。
      • 在结构结构、结构结构、结构结构结构、结构结构、结构结构、结构、结构和结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构、结构结构结构结构、结构结构结构、结构结构结构、结构结构结构、结构结构结构、结构结构结构、结构结构结构结构、结构结构结构、结构结构结构结构、结构结构结构结构、结构结构结构结构结构、结构结构结构结构结构、结构结构结构结构结构结构、结构结构结构结构结构、结构结构结构结构结构结构、结构结构结构结构结构结构结构、结构结构结构结构结构结构结构结构、结构结构结构结构结构结构结构结构、结构结构结构结构结构结构、结构结构结构结构结构结构结构结构、结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构结构前两个字节显示地址字段。当我们在内核中插入构件袜子体结构时,会发生下列情况:内核由前两个字节(地址区域两字节)界定,以决定如何读取下列空间(内核读地址区域前两个字节)。然后我发现了AFINEF的交易这样一来,你就会收到一个填充物:最初你将填充两个字节。再填充4个字节)。
      • 该结构是一个通用结构,包含地址信息,必须从另外两个结构转变为一个结构。

      除了将主机字节序列转换为网络字节序列外,在填充参数时,还必须将ip地址从字符串类型转换为ip 字节序列(大结尾)。
      在这里插入图片描述

      为什么数据结构中的 sin_addr 和 sin_port 需要更改为网络字节顺序?

      Sin_addr 和 Sin_port 都捆绑在 IP 和 UDP 层中。因此,这些必须是网络上的字节序列。然而,核心(内核)仅使用罪家庭域来决定数据结构中包含的地址类型。因此,它必须按此字节顺序排列。同时,Sin_Family没有向网络广播。这可能是机器的字节命令

      整体而言,可填充以下内容:
      在这里插入图片描述

      四、二. 此函数生成套接字文件描述符 。

      因为Linux的所有文件都需要网络连接才能打开网络卡设备, 此文件已创建 。struct file文件对象引导我们找到基于网络的信息。
      因此,套座返回值是一个文件描述符。

      创建连接网络连接的数据结构,这些连接在 Linux 中一直被视为文件,程序使用文档描述符打开文件。此函数与开放式函数相似。
      在这里插入图片描述

      3,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3

      当您构建软件包时, 仅提供文件信息, 我们创建一个网络文件, 所以您必须填写 ip. port 并连接文件, 当您创建软件包时, 网络信息构建文件信息被提供, 我们创建一个网络文件, 所以您必须填写 ip. port 并连接文件和网络信息 。
      知识产权和港口号识别网络中唯一允许客户定位的程序。
      有可以查阅的文件材料和网络材料,但它们之间没有联系,因此具有约束力。

      在这里插入图片描述

      Four. Three. Three.three.three.three.three.three.three.three.three.three.为什么当客户没有时服务器必须被绑起来?

      • IP地址和端口号用于确定特定主机的特定过程。也就是说,主机上的流程可使用端口号识别。标准服务器端已经修复 。管道和端口不需要,无法随时修改。例如,http的端口号是80 https:443 ssh:22。
      • 因此,操作系统必须管理机器中限制使用的港口号。
      • 如果不绑定服务器, 操作系统将随机为服务器创建端口号。 如果此端口号由操作系统分配给服务器, 而其它应用程序准备使用此端口号, 或者端口号已经使用, 服务器可能无法激活 。
      • 其次,服务器不会停止运行,我们把服务器上的端口号绑在服务器上,以简化主机中端口号的计划使用。 最后,如果不绑上,一旦服务器重新启动,端口号可能会改变,导致先前连接的客户重新加入。
      • 客户端必须主动向服务器提交请求, 因此客户端必须知道服务器的 IP 地址和端口号, 客户端即使已知, 也无法知道服务器端口的端口号, 即使与系统随机生成无关 。

      ===

      • 服务器不需要主动将数据传送给客户端, 因为客户端是活跃的, 而服务器是被动的。 当客户端将数据发送到服务器时, 它会播放IP地址及其端口号, 以便服务器能够很容易地发现客户端 。
      • 同时,客户并不总是能够运作,而只是要求向每个系统发出随机端口号码(操作系统有最明显的端口号码),而且无法约束自己。
      • 客户有很多客户端,如果绑定,不同的公司必须就适合哪个港口的软件进行沟通。端口是标识进程的,单一港口只能属于单一进程。如果多个流程共享同一端口,这将造成有约束力的失败。因此,各组织可以进行会谈并达成协议。是很不现实的。
      • 因此,服务器被捆绑,但客户没有。

      十四. UDP 接收器接口

      由于 UDP 没有连接, 只有服务器必须活跃, 才能直接接收和传送信件 。

      1,4,4,4,1,4,4,1,4,4,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,

      四、四、二、四、四、四、四、四、四、四、四、四 发送功能

      在这里插入图片描述

      五. 客户和跨网络 UDP服务

      5.1. 服务端

      udpServer.hpp:

      udpServer.cpp:

      5.2. 客户端

      udpClient.hpp:

      udpClient.cpp:

      5.3. 实验现象

      在这里插入图片描述

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/21493.html

          热门文章

          文章分类