Python6:Socket编程初步学习笔记

Socket协议概要

创建socket的时候,需要一些选项来说明本次使用协议具体是什么,常用的两个:
在这里插入图片描述
由此产生的不同组合:
在这里插入图片描述
但目前TCP(IPV4)是主流,SOCK_STREAM+AF_INET

创建和使用Socket

socket模块中有socket类: socket.socket

  • 接收数据的方法
  • 发送数据的方法
  • 监听端口的方法

socket函数:

  • 创建客户端
  • 创建服务端
  • 创建客户端+服务端(已连接)
  • ……
相关函数:
  • 基本函数
    在这里插入图片描述

  • 便捷函数

    • 创建服务端socket
      1 创建socket
      2 绑定地址(ip+port)
      3 监听地址
      在这里插入图片描述

怎么判断判断是否连接成功,我们可以在连接之后打断点,并在命令行查看是否监听,用netstat -ano | findstr 端口号
在这里插入图片描述

    • 创建客户端socket
      1 创建socket
      2 绑定地址(ip+socket)
      3 向指定的服务端发起链接
      在这里插入图片描述

在这里插入图片描述

    • 创建已连接的socket
      1 创建两个socket,其中一个座位server监听端口,另一个座位client连接端口
      2 连接成功后,把两个socket返回
      在这里插入图片描述
      查看pid 得到通信状态:
      在这里插入图片描述
      只有两个连接,是没有监听状态的,所以不会有其他链接进来,只能有这两个。

Socket对象

socket提供了一系列方法完成网络连接、数据通信,常用的有:

  • 网络连接

    • 服务端
      1 bind绑定地址(ip+port
      2 listen监听端口,允许其他socket发起连接
      3 accept接收连接,生成新的socket,完成数据收发
      4 cloese 关闭连接
    • 客户端
      1 bind绑定地址(ip+port
      2 connect连接指定地址
      3 cloese 关闭
  • 数据通信(IO)

    • sendall 发送数据
    • recv 接收数据

配置日志

在这里插入图片描述

创建服务端代码:
在这里插入图片描述
创建客户端代码:
在这里插入图片描述

通信:传递二进制数据流
server.accept()的返回值是一个新的socket连接和连接的客户端地址,
server只做一个事情,就是用来监听并创建新的连接
发送信息由客户端发送,conn用来接收并发送返回信息
在这里插入图片描述

在这里插入图片描述

使用便捷函数完成上述功能:
创建服务端监听python3.8+:
在这里插入图片描述
创建客户端连接:
在这里插入图片描述
通信部分代码不变

使用TTD方法实现socket编程

测试驱动开发TDD:
1 编写测试用例
2 执行测试用例(测试失败-红
3 编写业务代码
4 执行测试用例(测试成功-绿
5 重构代码
6 执行测试用例

在这里插入图片描述

内置的socketserver

socketserver预制了常见了socketserver:

  • TCPServer
  • ThreadingTCPServer
  • ForkingTCPServer
    1能够处理客户端中断的异常,不会导致server退出
    2提供了并发的支持
    3 将网络连接、数据处理分开

ThreadingTCPServer使用

socket聊天室:多人同时在线每个人都可以发言,发言内容每个人都能收到
协议:
header:固定长度,申明body长度
body:不固定长度
结束标记:以某个字符串作为结束标记(“\n”)
使用TCP进行传输
数据格式:name msg time ,使用json字符串{“name”:“张三”,“msg”:“你好”,“time”:“2024-2-24”}

编写客户端
  1. 1 建立socket, 断开socket

  2. 2 发送消息能力:
    2.1 确定要发送的内容
    2.2 组装固定格式的字典
    2.3 将字段转字符串
    2.4 字符串+\n
    2.5 字符串转字节流
    2.6 借助socket发送字节流

  3. 3 接收消息能力
    3.1 从socket读取字节流
    3.2 字节流转字符串
    3.3 去掉结束标记
    3.4 字符串转字典
    3.5 返回字典

发送:
在这里插入图片描述
接收:
在这里插入图片描述
socket链接的建立和断开:
在这里插入图片描述

编写相关测试用例

在这里插入图片描述

夹具:启动和关闭服务器
在这里插入图片描述

举例:可回复消息用例
在这里插入图片描述
其余用例可 以上述用例为基础进行拓展

todotodo:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QMT量化策略实盘(一)下单函数passorder

第一篇量化实盘的分享,从一定绕不开的综合下单函数passorder说起。 用于股票、期货、期权等下单和新股、新债申购、融资融券等交易操作。(对比ptrade就不支持期货交易) 这个函数功能很全,同时参数也比较多,在初次使用…

方格分割(蓝桥杯)

文章目录 方格分割题目描述答案:509思路dfs 方格分割 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。 如下就是三…

【vue3学习笔记(一)】vue3简介;使用vue-cli创建工程;使用vite创建工程;分析工程结构;安装开发者工具

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 对应课程136-140节 课程 P136节 《vue3简介》笔记 课程 P137节 《使用vue-cli创建工程》笔记 官方文档: https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create官方文档地址 查看vue-cli版本&#x…

git配置密钥

要配置 Git 密钥,可以按照以下步骤进行操作: 1.生成密钥:首先,在终端或命令提示符中运行以下命令生成密钥对: ssh-keygen -t rsa -b 4096 -C "dengweng-pulse.net"这将生成一个 RSA 密钥对,其中…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片,没有网络爬虫滥竽充数的图片,可直接用来训练。以上图片均一一手工标注,标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

http模块—http请求练习

题目要求:搭建如下http服务: 1.当浏览器向我们的服务器发送请求时,当请求类型是get请求,请求的url路径地址是/login。响应体结果是登录页面 2.当浏览器向我们的服务器发送请求时,当请求类型是get请求,请求…

【FIneBI可视化工具的使用】

前言: 💞💞大家好,书生♡,今天主要和大家分享一下可视化的工具FineBI的详细使用,希望对大家有所帮助。感谢大家关注点赞。 💞💞前路漫漫,希望大家坚持下去,不忘初心&…

【解决】CameraPath3 事件回调异常

开发平台:Unity 2021.3.7f1c1 编程平台:Visual Studio 2022 编程语言:CSharp 6.0 三方工具:CameraPath3   工具简述 在 2019年官方停止版本维护,不再支持 URP 等新版本。而实际业务要求继续使用该开发工具。   问题…

Java代码基础算法练习-求一个三位数的各位数字之和-2024.03.27

任务描述&#xff1a; 输入一个正整数n&#xff08;取值范围&#xff1a;100<n<1000&#xff09;&#xff0c;然后输出每位数字之和 任务要求&#xff1a; 代码示例&#xff1a; package M0317_0331;import java.util.Scanner;public class m240327 {public static voi…

瓦楞板一体化污水处理设备怎么选型

瓦楞板一体化污水处理设备的选型是一个重要而复杂的过程。在选择适合的设备前&#xff0c;我们需要考虑以下几个因素&#xff1a;污水性质、处理效果、处理能力、设备性能和成本等。本文将从这几个方面为您介绍瓦楞板一体化污水处理设备的选型方法。 首先&#xff0c;污水性质是…

计算机网络基础——网络安全/ 网络通信介质

chapter3 网络安全与管理 1. 网络安全威胁 网络安全&#xff1a;目的就是要让网络入侵者进不了网络系统&#xff0c;及时强行攻入网络&#xff0c;也拿不走信息&#xff0c;改不了数据&#xff0c;看不懂信息。 事发后能审查追踪到破坏者&#xff0c;让破坏者跑不掉。 网络…

Django 评论楼创建

Django 评论楼创建 【零】最终效果预览 【一】介绍 &#xff08;1&#xff09;情况说明 在Django模型层中有这么个字段 parent models.ForeignKey(toself, on_deletemodels.CASCADE, verbose_name"父评论ID", nullTrue, blankTrue)这个字段是一对多的外键字段 其…

07、JS实现:用回溯法实现数组全排列的算法(一步一步剖析,很详细)

回溯法实现数组全排列的算法 Ⅰ、回溯法实现数组全排列&#xff1a;1、题目描述&#xff1a;2、解题思路&#xff1a;3、实现代码&#xff1a; Ⅱ、小结&#xff1a; Ⅰ、回溯法实现数组全排列&#xff1a; 1、题目描述&#xff1a; 给定⼀个 没有重复 数字的序列&#xff0c;…

flowable-ui后台显式非中文

把flowable-ui的war包发布后&#xff0c;后台界面显示的是非中文 用的是6.7.2版本&#xff0c;经过了解该版本是有国际化配置文件的&#xff0c;支持中文 猜测可能是浏览器语言导致未显示中文&#xff0c;在控制台输入navigator.language&#xff0c;查看到果然是英文 解决方案…

如何制作蛋糕店小程序_开启您的蛋糕店小程序之旅

甜蜜滋味&#xff0c;一触即达——开启您的蛋糕店小程序之旅 在这个快节奏的时代&#xff0c;人们对美食的追求从未停歇。尤其是那些色香味俱佳、口感细腻的蛋糕&#xff0c;更是成为了许多人生活中的小确幸。然而&#xff0c;忙碌的工作和生活常常让我们无法亲自前往蛋糕店&a…

大型网络游戏设计与AI赋能-6

接上文&#xff01;&#xff01;! 所以最后我们会有一个Game design的分析。这个分析主要是在游戏类型&#xff0c;最后这个游戏会发布在什么平台上&#xff0c;游戏的玩法具体是什么样子的&#xff0c;需要提供给玩家哪些比较特殊的玩家体验等等。列出来这4项是一定要去考虑的…

经典机器学习模型(九)EM算法的推导

经典机器学习模型(九)EM算法的推导 1 相关数据基础 1.1 数学期望 1.1.1 数学期望的定义 根据定义&#xff0c;我们可以求得掷骰子对应的期望&#xff1a; E ( X ) X 1 ∗ p ( X 1 ) X 2 ∗ p ( X 2 ) . . . X 6 ∗ p ( X 6 ) 1 ∗ 1 6 2 ∗ 1 6 1 ∗ 1 6 3 ∗ 1 6 …

PostgreSQL11 | Windows系统安装PostgreSQL

本教程选取与参考书籍《PostgreSql11 从入门到精通》&#xff08;清华大学出版社&#xff09;的11大版本最新小版本11.22的安装作为教程案例 下载 下载PostgreSQL installer 下载到本地 安装 运行安装引导器 中国地区语言选项&#xff08;暂时&#xff09; Chinese(Simplifie…

测试开发工程师(QA)职业到底需要干些什么?part7:硬件测试工程师QA

概述 硬件测试工程师QA主要负责确保硬件产品在设计、制造和交付过程中的质量和性能。主要任务是进行测试、验证和分析硬件系统、组件和设备&#xff0c;以确保其符合规格和质量标准。下面是硬件测试工程师QA在其工作中常涉及的一些方面&#xff1a; 测试计划和策略&#xff1a…

EMCC13.5安装配置手册(详细版)

ORACLE OEM13.5安装配置详细文档 包含详细的安装配置&#xff0c;常见的错误和解决办法&#xff0c;已经OEM添加集群和主机等可能遇到的问题和解决办法 一、数据库基础环境安装 版本&#xff1a;Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 - 64bit Product…