Python攻城师的成长————网络编程(socket套接字、通信循环、链接循环、黏包问题)

      最后更新:2022-04-16 10:46

      今日学习目标

      • 学习插座以及如何在网络编程中使用插座,例如 TCP 协议。

      文章目录

      • 今日学习目标
      • 学习内容
      • 一. 套接字配置
        • 一,一个插座到底是什么?
        • 二. 插座开发和分类的二个历史
        • 3.套接字工作流程
      • 二、通信循环
      • 三、链接循环
      • 四、黏包问题
        • 问题
        • 方法一
        • 方法二
        • 思路与总结

      学习内容

      • socket套接字

      • 通信循环

      • 链接循环

      • 黏包问题

      一. 套接字配置

      一,一个插座到底是什么?

      在应用层面,插座是连接TCP/IP社区的中间软件的抽象层。它是一组接口。在设计模式中,事实上,索克特是一个正面模型。复杂的TCP/IP组隐藏在Socket界面下。对用户来说,所需要的只是一套简单的接口。让我们请Socket帮我们整理数据以符合指定的协议。
      所以,我们不必加入tcp/udp协议, 而套座已经为我们密封了, 我们要做的就是遵守套座规则, 而这个技术自然是基于tcp/udp标准。

      有些个人还称套接字为ip+port。IP地址用于在互联网上找到主机 。该端口用于识别此系统上运行的程序 。IP 地址已被指定到网页卡上 。该应用软件还启动了港口。Pi和港口的结合意味着因特网上的一种 " 实物应用 " 。Pid程序是同一台计算机运行的若干进程或线条的独特标识符。

      二. 插座开发和分类的二个历史

      • 袜子是1970年代在加州大学伯克利分校发明的,作为BSD Unix版本的Unix的一部分。因此,插座也被称为“伯克利索科特”或“BSD索科特”。最初,插座的用意是连接在同一主机上运行的许多程序。程序间通信或ICPC是这一术语的另一个术语。有两种(或所谓的两种种族)基于文件和网络。
        按文件类型分类的 Socket 家庭
        AF_UNIX 是插座姓氏 。
      • 所有 unix 文件, 基于文件的 tweaking 是数据提取的底部文件系统, 而两个 tweaking 进程在同一台机器上运行, 可以通过访问同一个文件系统进行间接交流 。
        按网络类型分类的索科特家庭
        AF_INET是插座家族的名称 。

      此外,AF_INET6还用于IPv6。另有一些家庭住址。不过,它们仅在一个平台或另一个平台上使用。要么被抛弃 要么被抛弃 要么被抛弃或者是很少被使用,如果它不工作了出来。所有地址家族中,Af_INET是最常用的。Python为各种各样的住址家庭提供支助。然而,因为我们只对因特网编程感兴趣,因此,我大部分时间只使用AF_INET。

      3.套接字工作流程

      • 服务端套接字函数
        我不知道你指的是什么,S. Bind () Bind (东道国,港口) to Socket
        我不知道你在说什么,S. Listen() 开始TCP听
        我不确定你在说什么;s.accept () 被动接受 TCP 客户端连接, 等待连接到达( 阻塞) 。

      • 客户端套接字函数
        我不知道你指的是什么, S. Connect () 主动初始化 TCP 服务器连接 。
        我不知道你在说什么, S. 连接_ ex () conf () 方法的扩展版本给出了错误代码, 而不是在错误发生时倾弃异常点 。

      • 插座功能可供全体公众使用。
        我不知道你在忙些什么 S.recv () 接收 TCP 数据
        我不知道你们在说什么, S. Send () 发送 TCP 数据( 当要传输的数据数量超过其缓存中可用空间的数量时, 发送丢失或未发布)
        我不确定你在说什么, S. Sendall () 发送整个 TCP 数据( 本质上, 循环呼叫发送, 发送发送所有不会丢失数据, 当发送的数据数量超过在自己的缓存中可用的空间数量时, 循环呼叫发送直到发布结束)
        我不知道你在说什么, S. Recvfrom () 接收 UDP 数据
        我不知道你在说什么 S. S. Sending UDP 数据
        我不知道你是什么意思, S. Getpeername () 连接到当前套接字的远程地址
        我不知道你在说什么, S. Getsockname () 当前插座的地址
        我不知道你在说什么 因为 S. Getsockopt () 返回套接字参数 。
        我不知道你是什么意思, S. Sesesockopt () 用于选择套接字的参数
        我不知道你在说什么 S. close socket socket ().

      • 面向锁的套接字方法
        我不确定你指的是什么 S. S. S. Setblocking () 建立屏障和非屏障模式。
        我不知道你在说什么,S.Settimeut() 设置超时以防止脚手架活动继续下去。
        我不知道你指的是什么,S. gettimeout() 超时获取被挡的脚架

      • 文件函数的套套
        我不知道你指的是什么 用于文件() 套接字的 S. File 描述符
        我不知道你在说什么, S. Makefield (). 构建一个与软件包相关的文件 。

      二、通信循环

      • 引言
        它通常用来中断一次性提供信息。
      • 方法
        首先,我们将处理静态信息的问题。
        使用输入,获取用户输入。
        之后,我们将讨论沟通周期问题。
        重新使用双方在数据交换中使用的代码。

      三、链接循环

      无法将一个消息附加到 mh 文件夹:%s:%s
      统计长度并判断即可
      2.反复重启服务端可能会报错>>>:address in use
      Apple 的计算机报告有许多错误。 Windows越来越不常见了 。
      from socket import SOL_SOCKET,SO_REUSEADDR
      抱歉, 服务器。 Setsockopt (SOL_ SOCKET, SO_ REUEADD, 1) # 在绑定之前
      3.链接循环

      今天,我们的客户只能一次提供一种服务,我们无法增加新的同事。

      四、黏包问题

      问题

      我们已经知道 tcp 很容易制造粘糊糊的袋子, 乌龟不会制造粘糊糊的袋子, 但是它们可能会丢失, 而tcp 利用了很多场景, 因此粘糊的包包必须固定。

      • TCP协议的特点
        它混合了数量不大和时间短暂的数据。
        它受卷轴括号内数字大小的影响! 我不知道我在说什么。
        流体过程和现在一样不折不扣。

      问题是,我们不知道什么数据 我们即将收到 在缩略语的括号。
      如果我们每次收到数据时 都清楚数据有多大 那么就没有粘糊糊的袋子了

      方法一

      解决粘胶袋问题的第一个方法粘粘袋的难度在于,技术优化方法混合并提供了两个较小的数据包。经常使用的若干次发送往往就是这种情况。因此,如果我们知道发送的数据数量,我们可以具体说明收到的数据大小。因此,你可能只是获取所有信息。下面是步骤的具体细节。看看代码。

      总结粘粘包,然后将数据放入数据,其中一个问题是,在获取无价值数据方面还存在额外的延迟,这样如何才能接收粘粘包?这需要以下解决方案。

      方法二

      二. 设计模块,以解决粘糊现象。

      思路与总结

      思路:
      首先,让我们用固定长度的包件 记录实际数据
      二,首先,给对方寄一个固定长度的包
      三. 当对方收到包件时,打开包件以确定实际数据长度。
      四. 实时数据接收时间长度
      扩展
      struct模块:

      • 包可以将任意数的长度合并成一个单一的长度。
      • 在包装之前, unpack 可以将预设的长度编号解包到数据的实际长度 。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类