2024.6.18

Python的网络编程

网络四层
在开始前,我们需要先了解一下我们在网络通信过程中的四个层次
在这里插入图片描述
我们上网产生的数据都是经过协议栈一层一层的封装然后经网卡发送到网络,经网络发送到服务端,然后服务端又是一层一层的解封装拿到自己想要的数据。

我们学习的tcp和udp都是基于IP(网际互连协议)实现的

IP
计算机在互联网时必须要有一个唯一的标识,这样才能确定数据能够唯一发送
这个标识就是ip
目前有两种格式,一种是ipv4,一种是ipv6
127.0.0.1
回环地址,通俗的讲,就是我们在主机上发送给127开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。本机内联络时,我们一般就用它表示自己的ip地址

端口
是用来区分计算机应用程序的一个整数
范围是0到66535,我们使用时一般用大一些的端口号以免和别的程序冲突.像8080,9999等

两种通讯方式的不同
TCP

在链接时会进行"三次握手"来确保通信的安全
它负责将两台计算机建立可靠链接,能够保证将信息安全送达.
是一种可靠的,一对一的,面向链接的通信协议

UDP
它是无连接的,就像发短信一样,只要知道对方的IP地址和端口好就可以发送
但是因此它不保证信息的安全,也不一定能数据到达接收方

套接字socket

在我们编程时,我们关心的是我们的应用程序的数据能不能正常的发送出去和接收服务端发回来的数据。
这就需要一个桥梁,一端连接操作系统的协议栈,一端连接用户的应用数据。socket就是这个桥梁。

套接指的是套接管,就是将两根水管套接起来的管子,然后“字”是此连接的数据标识,即一个WORD,所以套接字就是一个标识连接的数据体。

这里它套接的又是什么东西呢?
它包含着通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。

Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Python中的socket模块

常用的方法

bind((ip,port)) 绑定IP地址和端口
listen(N) 开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept() 被动接收TCP客户端连接,阻塞式
connect((ip,port)) 主动初始化TCP服务器连接
recv(size) 接收TCP数据,返回值为字符串类型,size表示要接收的最大数据量
send(str) 发送TCP数据,返回值是要发送的字节数量
recvfrom() 接收UDP数据,返回值为一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)) 发送UDP数据,返回值是发送的字节数
close() 关闭套接字

我们发现,tcp和udp的使用方法不一样,所有要区分开使用

tcp版
我们先写服务器端

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8080))
s.listen(1)while True:conn, addr = s.accept()print('Connected by', addr)data = conn.recv(1024)conn.sendall(b'Hello, world')conn.close()

我们注意到,服务器端要先绑定一个端口和ip地址,这个绑定的意义在于,告诉计算机去哪个IP地址找哪个应用端口来连接
之后就是监听,监听这个动作就是等待一个来连接的客户端
accept就是开始被动接受过来的链接,只有服务器这边通过了(accept)之后,客户端才能连接到服务器
recv就是接受传来的信息

然后我们再写客户端

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8080))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

这里和服务器很不一样,因为是客户端,毕竟客户是这样的,只需要负责connect到服务器就行了,服务器要做的就多了
然后连接好了我们就可以发送数据了,想接收数据也正常用recv就可以

udp版

import socket
server_address = ('192.168.31.54', 12345)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:message = "祖国必定统一!"client_socket.sendto(message.encode(), server_address)#发送数据data,server = client_socket.recvfrom(1024)#接收数据

很显然,udp这边不需要连接,只需要确定好ip和端口,然后朝着这个地址用sendto发送消息就好了
想接受也只需要用recvfrom,然后解包赋值获取data和地址就好

区别
主要就创捷套接字时
一个是socket.SOCK_STREAM流式的双向连接
一个是socket.SOCK_DGRAM这里的dgram就是数据报的意思,说明是无连接的电报式的发送

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

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

相关文章

YOLOv8目标检测算法在地平线Bernoulli2架构BPU上高效部署参考(PTQ方案)30fps!

—— 以RDK X3为例,修改Head部分,8ms疾速Python后处理程序,30fps稳稳当当 本文在地平线对YOLOv8s的Backbone修改的基础上,提出一种在地平线Bernoulli2架构BPU上部署YOLOv8的后处理思路。使用640640分辨率,80类别基于C…

香橙派AIPro开机测试

资料准备: 香橙派官网资料下载链接:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html 硬件准备 香橙派ai pro一个 32G sd卡,带出厂镜像 电源 鼠标 键盘 hdmi显示屏 测试介绍 由…

4418 android4.4 + 6818 android5.1 移植gps

网上已经有的移植的资料 目前 3399 的板子上 对已有的可运行的GPS 进行测试。 我这里的 rk3399 的板卡 , Android7 Android8 都是 可以运行 GPS 应用程序的。 使用的是 ttyS4 的节点。 问题: 我发现, 开机就删掉 ttyS4 节点,也是可以 打开应用的。并且可以正常运行。不…

图片怎么弄成黑白的?关于将图片改成黑白的几种方法

图片怎么弄成黑白的?黑白照片以其独特的艺术魅力和经典的视觉效果,依然在摄影和图像处理中占据重要地位。无论是为了追求怀旧的氛围,还是为了突出图像的构图和光影效果,许多人都希望将彩色图片转换成黑白图片。这不仅可以赋予图像…

全网最强Spring教程 | 万字长文爆肝Spring(三)

Spring_day03 今日目标 理解并掌握AOP相关概念能够说出AOP的工作流程能运用AOP相关知识完成对应的案例编写重点掌握Spring的声明式事务管理 1,AOP简介 前面我们在介绍Spring的时候说过,Spring有两个核心的概念,一个是IOC/DI,一个…

影响建筑效果图后期时间的因素有哪些?渲染100邀请码1a12

建筑效果图是建筑设计师展示设计方案的重要手段,为了完美展现,我们通常会对效果图进行后期处理,那么影响后期时间的因素有哪些?这次我们来看看吧。 1、底图的质量 底图是指原始的渲染图片,它决定了后期处理的难易程度…

鸿蒙APP开发的技术难点

鸿蒙APP开发的技术难点主要体现在以下几个方面,鸿蒙APP开发是一项技术难度较高的工作,需要开发者具备扎实的编程基础、分布式开发能力和学习新技术的意愿。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 多…

软件生存期模型

软件生存期模型是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。典型的软件生存期模型有瀑布模型、增量模型、快速原型模型、喷泉模型、螺旋模型、统一过程、敏捷开发模型等。 瀑布模型 1970年由Royce首先提出瀑布模型&#x…

老杨说运维 | 如何结合现状进行运维路径建设(文末附演讲视频)

青城山脚下的滔滔江水奔涌而过,承载着擎创一往无前的势头,共同去向未来。2024年6月,双态IT成都用户大会擎创科技“数智化可观测赋能双态运维”专场迎来了完满的收尾。 本期回顾来自擎创科技CTO葛晓波的现场演讲:数智化转型的核心目…

超多细节—app图标拖动排序实现详解

前言: 最近做了个活动需求大致类似于一个拼图游戏,非常接近于咱们日常app拖动排序的场景。所以想着好好梳理一下,改造改造干脆在此基础上来写一篇实现app拖动排序的文章,跟大家分享下这个大家每天都要接触的场景,到底…

超图论文细品——2019年AAAI《Hypergraph Neural Networks》

我是“导航” 1 摘要1.1 简介1.2 问题描述 2 超图2.1 图和超图对比 参考 1 摘要 1.1 简介 文章提出了一种名为超图神经网络的框架,用于高维数据的表示学习。 该方法英文称呼为 Hypergraph Neural Networks,简写为 HGNN。 1.2 问题描述 传统的 GNN 是…

SD卡可以格式化成NTFS吗 SD卡Mac怎么读取内容

SD卡作为便携式存储媒介,广泛应用于我们的日常生活与工作之中。而NTFS,作为一种先进的文件系统,因其强大的功能和安全性,在Windows平台备受青睐。然而,当谈及将SD卡格式化为NTFS这一话题时,用户的疑惑随之而…

Jetpack Compose_Alignment对其+Arrangement排列

文章目录 1.Alignment 对齐1.1Alignment 对齐方式1.2AbsoluteAlignment 绝对对齐1.3BiasAlignment 偏差对齐1.4BiasAbsoluteAlignment偏差绝对对齐 2.Arrangement 排列2.1Arrangement 排列方式2.2Arrangement.Horizontal2.3Arrangement.Vertical 1.Alignment 对齐 1.1Alignmen…

Uncaught TypeError: Cannot read properties of null (reading ‘isCE‘)

问题描述 使用 view-ui-plus 加 vue3 开发项目,本地启动项目正常,但其他人将代码拉下来,启动项目时报错 Uncaught TypeError: Cannot read properties of null (reading isCE): 原因分析: 尝试将 mode_nodules 文件删…

C# yolov8 OpenVINO 同步、异步接口视频推理

C# yolov8 OpenVINO 同步、异步接口视频推理 目录 效果 项目 代码 下载 效果 同步推理效果 异步推理效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Windows.Form…

智源更新大模型排行榜:豆包大模型“客观评测”排名国产第一

6月中旬,智源研究院旗下的 FlagEval 大模型评测平台发布最新榜单:在有标准答案的“客观评测”中,GPT-4 以76.11分在闭源大模型中排名第一;Doubao-Pro(豆包大模型)以75.96分排名第二,同时也是得分…

隧道代理是什么?怎么运作的?

隧道代理作为网络代理的一种形式,已经在现代互联网世界中扮演着重要的角色。无论是保护隐私、访问受限网站还是实现网络流量的安全传输,隧道代理都发挥着重要作用。在本文中,我们将深入探讨隧道代理的概念、运作方式以及在不同场景中的应用。…

天风宏观:再论经济“去金融化”

天风宏观认为,经济“去地产化”之后也正在“去金融化”,应逐渐淡化金融数据对于经济的指示意义,更关注经济数据本身和进行中的结构转型。 5月金融数据延续了此前逻辑, 受规范手工补息、存款分流等因素影响,M1同比-4.2%…

【多线程】线程状态

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 枚举线程所有状态2. 线程转移2.1 示意图2.2 观察 NEW 、 RUNNABLE 、 TERMINATED 状态的转换2.3 观察 WAI…

【K8S】通过官方 kubeadm 快速搭建 Kubernetes 集群

文章目录 1、环境准备2、搭建流程2.1、初始化配置2.2、安装 Docker2.3、部署 K8S 1、环境准备 针对本次K8S集群搭建环境,可以使用虚拟机,不过这里我直接模拟真实生产线上环境,忍痛购买了3台阿里云ECS服务器,服务器信息如下&#…