软件测试工程师必会技术:Python带你上手WebSocket

news2024/11/26 7:35:54

关于Socket那些事

Socket,即网络套接字,是双向通信通道的端点(是抽象的)。

套接字可以在一个进程内、同一台机器上的进程之间,或者在不同机器上的进程之间进行通信。

网络套接字可以通过多种不同的通道类型得以实现,例如TCP、UDP等。

换句话说,网络套接字,是在计算机网络中,两个运行程序之间通信流中的一个端点。这个端点是一个虚拟抽象的概念,并不存在任何硬件。

网络套接字可以通过IP地址和端口号的组合来唯一标识。下面我们对于Socket套接字相关术语做简单介绍,以便于后续内容的理解。

Domain(域)

作为网络中的传输机制,域是协议中的一员。这些域的值是常量,例如AF_INET、PF_INET、PF_UNIX、PF_X25等,这些常量都属于地址系列,用于指定套接字可以与之通信的地址类型。

Type(类型)

表示两个端点之间的通信类型,通常有SOCK_STREAM和SOCK_DGRAM。

SOCK_STREAM

基于TCP,数据传输比较有保障,是有保障的面向连接的Socket,即能保证数据正确传送到对方;基于数据流的传输;使用TCP/IP协议的网络编程。

SOCK_DGRAM

基于UDP,用于无向连接协议,是无保障的面向消息的socket,主要用于在网络上发放广播信息;基于数据包的传输;使用UDP协议的网络编程。

Protocol(协议)

用于标识域和类型内的协议变形。它的默认值是0,通常被省略。

Hostname(主机名)

网络接口的标识符。主机名可以是字符串、点分四组地址或冒号(也可能是点)表示法的IPV6地址。

Port(端口)

每个服务器监听调用一个或多个客户端的端口。

PythonSocket模块

Python中实现Socket编程,就需要用到Socket模块。我们可以通过以下语法创建Socket:

# 导入socket库,创建一个简单的socket

import socket

s = socket.socket (socket_family, socket_type, protocol = 0)

创建Socket时,可以使用不同参数(相关概念可参见上文):

·socket_family:AF_UNIX或AF_INET

·socket_type:SOCK_STREAM或SOCK_DGRAM

·protocol:这通常被忽略,默认为0

SocketMethods套接字方法

Python中为套接字提供了三种不同的方法,分别是"服务端套接字方法"、"客户端套接字方法"、"通用套接字方法"。

(1)服务端套接字方法

在客户端-服务器架构中(C/S架构),有一个中央服务器,来提供服务,众多不同的客户端则从该中央服务器接收服务。众多不同客户端也会向该中央服务器发出请求。

C/S架构中的一些重要服务器套接字方法有:

socket.bind()

将服务器地址(主机名,端口号)绑定到套接字。

socket.listen()

监听与套接字的连接,该方法启动了TCP监听器;此方法中的参数用于指定排队链接的最大数量(最小值为0,最大值为5)。

socket.accept()

接受TCP客户端连接,该方法将返回一对值(conn,address),其中conn是一个新的套接字对象,用于发送和接受数据;address是绑定到套接字的地址。在使用该方法之前,必须先使用socket.bind()和socket.listen()这两个方法。

(2)客户端套接字方法

在客户端-服务器架构中(C/S 架构),客户端会请求服务器,并且也会从服务器接收服务。socket.connect(address)该方法主动建立服务器连接,简而言之,该方法的作用就是将客户端连接到服务器。

(3)通用套接字方法

除了客户端和服务端套接字方法,还有一些通用的套接字方法,这些方法在 Socket套接字编程中也非常有用。

常用的通用套接字方法有:

·.recv(bufsize)

用于从套接字接收 TCP 消息;

参数 bufsize 代表缓冲区大小,定义了该方法在任何时候可以接收的最大数据量。

·socket.send(bytes)

用于将数据发送到连接着远程机器的套接字上;参数 bytes 表示发送到套接字的字节

数。

·socket.recvfrom(data,address)

用于从套接字接收数据;

该方法返回两对值(data,address);其中,data 表示接收到的数据,address 表示发送数据的套接字地址。

·socket.sendto(data,address)用于向套接字发送数据;

该方法返回两对值(data,address);其中,data 表示发送的字节数,address 表示远程机器的地址。

·socket.close()用于关闭套接字。

·socket.gethostname()返回主机的名称。

·socket.sendall(data)

将所有数据发送到连接着远程机器的套接字,直到发生错误;

期间,如果发生错误,则使用 socket.close()方法关闭套接字。

4、应用:通过 Python 在服务器和客户端之间建立连接

为了能够在服务器和客户端之间建立连接,我们需要通过 Python 编写两个程序,分别用于服务器,和客户端。

【服务端程序】

(1)socket.bind()方法

在服务端 Socket 套接字程序中,通过使用 socket.bind()方法,将其绑定到指定的 IP地址及端口号上,这样一来,就可以监听到传入该 IP 和端口上的请求。

(2)socket.listen()方法

然后,使用 socket.listen()方法将服务器设置为监听模式。该方法有一个参数,表示当服务器正忙时,当前允许几个连接保持等待;例如 socket.listen(2),则表示当前允许 2 个连接保持等待,如果第 3 个套接字尝试连接,则该连接请求会被拒绝。

(3)socket.send()方法

使用 socket.send()方法向客户端发送消息。

(4)socket.accept 方法

使用 socket.accept()方法启动连接。

(5)socket.close()方法

使用 socket.close()方法关闭连接。

……

【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战

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

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

相关文章

[ 云计算 | AWS ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全指南

文章目录 一、前言二、所需 Maven 依赖三、先决必要的几个条件信息四、创建客户端连接五、Amazon S3 存储桶操作5.1. 创建桶5.2. 列出桶 六、Amazon S3 对象操作6.1. 上传对象6.2. 列出对象6.3. 下载对象6.4. 复制、重命名和移动对象6.5. 删除对象6.6. 删除多个对象 七、文末总…

Linux 云服务器挂载数据盘

1、检查linux服务器磁盘情况 df -h 可以看到无磁盘挂载信息。 2、查看待挂载磁盘信息 fdisk -l 可以看到40G系统盘、50G数据盘(盘符:/dev/vdb) 3、对数据盘分区 fdisk /dev/vdb 根据提示,依次输入“n”,“p”“1…

ModaHub魔搭社区:向量数据库产业的现状与技术挑战

I. 向量数据库的崛起 什么是向量数据库 在过去的一段时间里,向量数据库逐渐在数据库领域崭露头角。那么,什么是向量数据库呢?简单来说,向量数据库是一种专门设计用来处理向量数据的数据库。这些向量数据可以是物理测量、机器学习模型输出、地理空间数据等。向量数据库使用…

归纳整理:开发多用户商城系统的关键细节

电子商务的迅速发展,越来越多的企业和商家选择开发多用户商城系统来进入线上商城市场。然而,在选择和开发多用户商城系统时,有一些关键的细节需要特别关注,以确保系统的顺利运行和用户的满意度。 一、安全性与数据保护 多用户商城…

浅析SAS协议:链路层

文章目录 概述原语通用原语连接管理原语连接通信原语 地址帧IDENTIFY地址帧OPEN地址帧 链路复位Link ResetHard ResetSATA的Link Reset 连接管理建立连接连接仲裁 流量控制SSP流控Credit Advance SMP流控 相关参考 概述 SAS链路层用于定义原语、地址帧以及连接相关的内容&…

和鲸冠名,全权支持!全国高校青年教师数据科学与商业分析案例教学竞赛成功举办

为推动数据科学与商业分析领域教学模式的创新,以赛促教,激发教师们的教学热情和创新能力,以赛促创,激发学生们的创新潜能和能动性,中国商业统计学会举办了首届“和鲸杯”全国高校青年教师数据科学与商业分析案例教学竞…

关于yarn安装时报“node“ is incompatible with this module的解决办法

前提: 在用vue写一个h5页面时,当在用yarn安装时,提示如下错误: The engine “node” is incompatible with this module. Expected version "^14.18.0 || ^16.14.0 || >18. 解决办法 我是使用命令忽略错误&#xff1a…

设计模式中的关系

文章目录 一、依赖概念 二,关联概念 三、聚合概念 四、组合概念 五、实现概念 六、继承概念 图总结整体总结 一、依赖 概念 依赖是一种临时使用关系,代码层体现为作为参数。 具体体现:依赖者调用被依赖者的局部变量、参数、静态方法&#…

认识Mat容器

目录 1.什么是Mat类 2.Mat类能存储的数据 整数类型(有符号和无符号): 浮点数类型: 布尔类型: 3.Mat类的创建 1.利用矩阵宽、高和类型参数创建Mat类 2.利用矩陈Size(结构和数据类型参数创建Mat类 3.利用已有Mat…

c++ day6

1.编程题: 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动…

RSA私钥解密操作

RSA私钥解密操作 一、背景二、操作三、常见问题3.1 invalid key format3.2 解密的数据太长3.3 Decryption error 一、背景 项目数据库中存放的敏感字段已使用rsa加密的方式,将内容加密成密文存放, 现在需要在使用的时候,使用私钥进行解密。 二、操作 …

无涯教程-Python机器学习 - AdaBoost函数

它是最成功的增强集成算法之一。该算法的主要关键在于它们对数据集中的赋予权重的方式。因此,在构建后续模型时,该算法无需过多关注。 在以下Python配方中,我们将通过使用Pima Indians糖尿病数据集上的 sklearn 的 AdaBoostClassifier 类来构建用于分类的Ada Boost集成模型。 …

【计算机基础】一文带你了解 Linux

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

【DevOps视频笔记】6 - 7. Jenkins 介绍 和 安装

一、Integrate 工具 二、Jenkins 介绍 1. Jenkins 最主要的工作 2. CI / CD 可以理解为: 2.1 CI 过程 2.2 CD 过程 三、Jenkins 安装 1. 安装准备工作 2. 安装 Jenkins Stage 1:拉取 jenkins 镜像 Stage 2:编写docker-compose.yml St…

Postgresql的一个bug_涉及归档和pg_wal

故障描述: 服务器ocmpgdbprod1,是流复制主节点,它的从节点是ocmpgdbprod2,两个节点的Postgresql数据库版本都是PostgreSQL 11.6,主节点ocmpgdbprod1配置了pg_wal归档,从节点ocmpgdbprod2没有配置pg_wal归档…

雅思作文复习

目录 我使用的词汇: 上升: 下降: 波动: 保持: 幅度 大变化: 小变化: 雅思评价标准改变 小作文一般花费20分钟,我觉得自己能在18分钟解决是最好 考生在雅思考试中的小作文&a…

kali的学习

网络配置 1.kali的网络设置 首先我们了解kali的网络设置 DHCP:动态主机配置协议 是一个局域网的协议 使用UDP 协议工作静态IP:用于大部分的中小型网络 通过网络管理员手动分配IP原理进程 /etc 系统大部分服务启动过程都要访问该目录 我们直接去看看…

高效便捷的法律咨询小程序的设计与实践

现如今,随着智能手机的普及和移动互联网的发展,小程序成为了一种新兴的应用形式。对于律师事务所来说,开发一款专属的法律咨询小程序,无疑可以为客户提供更加便捷和高效的服务。那么,对于初次接触小程序制作的新手来说…

spring:AOP面向切面编程+事务管理

目录 一、Aop( Aspect Oriented Programming) 二、springAOP实现 1.XML实现 2.注解实现 三、spring事务管理 一、Aop( Aspect Oriented Programming) 将程序中的非业务代码抽取,使非业务代码与业务代码相隔离,为目标类创建一个代理对象让代理对象调用…

【C++初阶】stack的常见操作和模拟实现

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…