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:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机学习笔记——LED闪烁和流水灯

任务分析 首先要知道LED闪烁主要是怎么工作的,闪烁亮灭自然是一下为高一下为低,亮灭的频率则需要延时来进行控制。 上节已经知道了如何点亮那延时如何做呢首先先编写主框架 这样是否可以通过循环将LED灯一直循环闪烁。 以为while一直在循环所以其实是可…

向开发板上移植ip工具:交叉编译 ip工具

一. 简介 前面几篇文章学习了 CAN设备节点的创建,以及如何使能 CAN驱动。 本文学习向开发板上移植ip工具。 二. 向开发板上移植ip工具:交叉编译 ip工具 注意:在移植 ip 命令的时候必须先对根文件系统做个备份!防止操作失误导…

力扣74---搜索二维矩阵

目录 题目描述: 思路: 代码: 题目描述: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 targ…

c#绘制图形

窗体工具控件 如果选纹理 ,需要在ImageList中选择图像(点击添加选择图片路径) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.…

【Redis教程0x03】详解Redis的基本数据类型

引言 根据【Redis教程0x02】中介绍的,Redis的数据类型可分为5种基本数据类型(String、Hash、List、Set、Zset)和4种高级数据类型(BitMap、HyperLogLog、GEO、Stream)。在本篇博客中,我们将详解这9种数据类…

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参…

Springboot做分组校验

目录 分组校验 Insert分组 Upload分组 测试接口 测试结果 添加测试 更新测试 顺序校验GroupSequence 自定义分组校验 自定义分组表单 CustomSequenceProvider 测试接口 测试结果 Type类型为A Type类型为B 总结: 前文提到了做自定义的校验注解&#xff…

牛客NC170 最长不含重复字符的子字符串【高频 中等 map、滑动窗口 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7 思路 用一个hashmap记录每个字母的index如果这个字母已经在map里了说明已经有重复了这样就更新看这个字母上次出现的index需要注意的是这种情况:“bacbca”这里的a…

初识kafka-数据存储篇1

目录 背景 1 kafka总体体系结构 2 疑问解答 2.1 高吞吐低延迟 2.2 实现分布式存储和数据读取 2.3 如何保证数据不丢失 背景 最近在和产品过项目审批的时候,深刻感受到业务方对系统的时时响应提出了更高的要求。目前手上大部分的业务都是基础定时任务去实现的&…

【yolo算法水果新鲜程度检测】

Yolo(You Only Look Once)系列算法是一类流行的一阶段实时目标检测模型,在水果检测领域有着广泛的应用。因其高效性和实时性而受到青睐,可用于识别和定位图像中不同种类的水果以及水果的新鲜度。 YOLOv3 已被用于水果商品的检测分…

家乡特色推荐系统设计与实现|SpringBoot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,…

【Linux】线程互斥{线程间的互斥相关背景概念/锁的相关问题/锁的原理/可重入VS线程安全}

文章目录 0.计算机如何完成y a * b c ?1.线程间的互斥相关背景概念2.pthread_mutex_t3.pthread_mutex_lock()4.time() or gettimeofday5.锁的相关问题6.锁的原理7.可重入VS线程安全8.完善后的代码 0.计算机如何完成y a * b c ? 来源: 王道…

nodejs+vue反诈科普平台的设计与实现pythonflask-django-php

相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低反诈科普平台的运营人员成本,实现了反诈科普平台的标准化、制度化、程序化的管理,有效地防止了反诈科普平台的随意管理,提高了信息的处理速度和精确度,能够…

基础篇Redis

基础篇Redis 1.Redis简单介绍 Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型NoSql 其中键值型,是指Redis中存储的数据都是以key.value对的形式存储,而value的形式多种多样,可以是字符串.数值.甚至json…

Windows/Linux-openEuler系统使用路由侠内网穿透,部署项目详细教程

文章目录 Windows/Linux-openEuler系统使用路由侠内网穿透,部署项目详细教程一、在windows系统下载安装路由侠并实现项目部署1、下载路由侠并注册安装到Windows系统2、点击内网映射,添加映射,注册域名前缀3、选择网站应用4、配置你想要代理项…

mysql 存储引擎 基本介绍

目录 一 存储引擎概念介绍 (一)存储引擎概念 (二)MySQL常用的存储引擎 (三)存储引擎运作方式 二 MyISAM 存储引擎介绍 (一) MyISAM 存储引擎特点 1,不支持…

栅格地图路径规划:基于螳螂搜索算法(Mantis Search Algorithm,MSA)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

数据分析和机器学习库Pandas的使用

Pandas 库是一个免费、开源的第三方 Python 库,是 Python 数据分析和机器学习的工具之一。Pandas 提供了两种数据结构,分别是 Series(一维数组结构)与 DataFrame(二维数组结构),极大地增强的了 …

个人博客系列-后端项目-系统角色配置(8)

系统角色配置需要设置的接口 用户可以绑定多个角色,角色对应有多个路由权限。用户绑定角色后,可以访问当前角色下的各个api路由和菜单路由。 用户注册时设置用户角色修改用户角色(同时对应用户可以访问的路由将会同步变更)添加修…

有关AI的随笔(1)

随笔: 今天是周天,是个好日子,结果老师布置的诗还没写,只好去借助AI,结果我发现了几个有趣的问题: 1. AI写的诗是如何来的?通过数据库? 2. 它真的明白是什么意思吗?&…