Python6:Socket编程初步学习笔记

news2024/11/15 14:04:41

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.coloradmin.cn/o/1542694.html

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

相关文章

macOS访问samba文件夹的正确姿势,在哪里更改“macOS的连接身份“?还真不好找!

环境:路由器上需要身份认证的Mini NAS macOS Sonoma 14 这是一个非常简单的问题,但解决方法却藏得比较深,不够直观,GPT也没有给出明确的解决提示,特意记录一下。 macOS很多地方都很自动,有时候让人找不到设…

深度学习pytorch——多分类问题(持续更新)

回归问题 vs 分类问题(regression vs classification) 回归问题(regression) 1、回归问题的目标是使预测值等于真实值,即predy。 2、求解回归问题的方法是使预测值和真实值的误差最小,即minimize dist(p…

opencv各个模块介绍(2)

Features2D 模块:特征检测和描述子计算模块,包括SIFT、SURF等算法。 Features2D 模块提供了许多用于特征检测和描述子匹配的函数和类,这些函数和类可用于图像特征的提取、匹配和跟踪。 FeatureDetector:特征检测器的基类&#xf…

java数据结构与算法刷题-----LeetCode452. 用最少数量的箭引爆气球

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:贪心算法,时间复杂度O( n ∗ l …

【计算机】——51单片机——持续更新

单片机是一种内部包含CPU、存储器和输入/输出接口等电路的集成电路(IC芯片) 单片机是单片微型计算机(Single Chip Microcomputer)的简称,用于控制领域,所以又称为微型控制器(Microcontroller U…

AI+软件工程:10倍提效!用ChatGPT编写系统功能文档

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT,我们能让编写系统功能文档的效率提升10倍以上。 ​《Leetcode算法刷题宝典》一位阿里P8大佬总结的刷题笔记…

一文看懂,高端及大流量停车场如何选择合适的道闸管理系统?

在当今快速发展的城市环境中,停车场的管理和运营已成为城市基础设施建设的重要组成部分。不同类型的停车场,如大流量停车场和高端停车场,面临着各自独特的挑战和需求。为了确保停车场的高效运营和良好的用户体验,选择合适的道闸管…

在ubuntu22.04系统上用pycharm编写第一个ros2程序

1.打开终端(快捷键altctrlt),创建工作空间,工作空间就是文件夹 2.创建一个功能包 打开pycharm的终端(altf12) 3.创建节点文件 在village_li文件夹右键新建li4.py 4.在li4.py编写代码 5.在setup.py里面添加…

Ubuntu Desktop 安装谷歌拼音输入法

Ubuntu Desktop 安装谷歌拼音输入法 1. Installation1.1. 汉语语言包​1.2. 谷歌拼音输入法1.3. 安装语言包1.4. 键盘输入方式系统1.5. 重启电脑1.6. 输入法配置 2. configuration2.1. Text Entry Settings… 3. ExecutionReferences 1. Installation 1.1. 汉语语言包 strong…

淘宝海外获取tglobal跨境商品原数据 API 返回值说明

一、应用场景 宝海外获取TGlobal跨境商品原数据API的应用场景相当广泛,涵盖了多个领域和行业。以下是一些主要的应用场景: 跨境电商平台:跨境电商平台可以通过此API获取全球范围内的商品信息,从而丰富平台上的商品种类&#xff…

边缘计算基础介绍及AKamai-linode产品分析

1、背景 随着互联网的发展,我们进入了大数据时代,这个时代也是移动互联网的时代,而且这个时代,大量的线下服务走到线上,随之而来的,比如外卖、叫车……于是,有各种各样的 App 和设备在收集你的…

如何打破SAST代码审计工具的局限性?

关键词:白盒测试;代码分析工具;代码扫描工具;静态代码检测工具; 在代码的世界里,安全问题如同潜伏的暗礁,随时可能让航行中的软件项目触礁沉没。SAST代码审计工具如同雷达一样,以其独…

Python - 深度学习系列30 - 使用LLaMA-Factory微调模型

说明 最实用的一种利用大语言模型的方式是进行微调。预训练模型与我们的使用场景一定会存在一些差异,而我们又不可能重头训练。 微调的原理并不复杂,载入模型,灌新的数据,然后运行再训练,保留checkpoints。但是不同项…

Cobalt Strike -- 各种beacon

今天来讲一下cs里面的beacon 其实cs真的功能很强大,自带代理创建,自带beacon通信!!! 一张图,就能说明beacon的工作原理 1.Beacon 每当有一台机器上线之后,我们都会选择sleep时间,…

PCI产业概述和产业发展动态分享

atsec白海蔚 2024年3月底 关键词:支付卡产业、PCI DSS、数据安全、支付交易 本文为atsec和作者技术共享类文章,旨在共同探讨信息安全的相关话题。转载请注明:atsec和作者名称。 *如有兴趣了解早期产业信息请参见作者于2021年4月发布信息&a…

数据在内存里面的存储

学习流程 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————…

SOC子模块---RTC and watchdog

RTC RTC大致执行过程: 对SOC 中的锁相环或者外部晶振的时钟进行计数;产生时,分,秒的中断;送给中断控制器;中断控制器进行优先权选择后送给cpu;Cpu执行中断服务程序;在中断服务程序…

吴恩达深度学习笔记:神经网络的编程基础2.15-2.17

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第二周:神经网络的编程基础 (Basics of Neural Network programming)2.15 Python 中的广播(Broadcasting in Python)2.16 关于 python _ numpy 向量的说明&…

Java中的代理模式(动态代理和静态代理)

代理模式 我们先了解一下代理模式: 在开发中,当我们要访问目标类时,不是直接访问目标类,而是访问器代理类。通过代理类调用目标类完成操作。简单来说就是:把直接访问变为间接访问。 这样做的最大好处就是&#xff1a…

UE5 LiveLink 自动连接数据源,以及打包后不能收到udp消息的解决办法

为什么要自动连接数据源,因为方便打包后接收数据,这里我是写在了Game Instance,也可以写在其他地方,自行替换成Beginplay和Endplay 关于编辑器模式下能收到udp消息,打包后不能收到消息的问题有两点需要排查,启动打包后…