python成长技能之网络编程

文章目录

  • 一、初识Socket
    • 1.1 什么是 Socket?
    • 1.2 socket的基本操作
    • 1.3 socket常用函数
  • 二、基于UDP实现客户端与服务端通信
  • 三、基于TCP实现客户端与服务端通信
  • 四、使用requests模块发送http请求


一、初识Socket

1.1 什么是 Socket?

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ad9a4f9959e24caf83ba0b2e84883459.png
一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定

  • 在python里面,提供了两个级别访问的网络服务

    • 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法
    • 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发
  • 通信协议可分为TCP、UDP

    • TCP(Transmission Control Protocol传输控制协议)是一种面向连接的,可靠的,基于字节流的传输通信协议
    • UDP(User Data Protocol,用户数据报协议)是无连接的,即发送数据之前不需要建立连接,UDP尽最大努力交付,即不保证可靠交付(类似于发短信,我只管发,能不能接受到跟我关系不大)

1.2 socket的基本操作

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

1.3 socket常用函数

  1. 创建套接字

    • socket.socket(family, type):
      • family: 地址族,常用的有 socket.AF_INET(IPv4)和 socket.AF_INET6(IPv6)
      • type: 套接字类型,常用的有 socket.SOCK_STREAM(TCP)和 socket.SOCK_DGRAM(UDP)
  2. 绑定地址

    • socket.bind(address):
      • address: 一个包含 IP 地址和端口号的元组,用于绑定套接字到指定的地址和端口
  3. 监听连接

    • socket.listen(backlog):
      • backlog: 指定可以排队的最大连接数
  4. 接受连接

    • socket.accept():
      • 返回一个新的套接字对象和客户端的地址。这个新的套接字用于与客户端进行通信
  5. 发送和接收数据

    • socket.sendall(data):
      • data: 要发送的字节数据。确保数据是字节类型(使用 b’…’ 或 str.encode())
    • socket.recv(bufsize):
      • bufsize: 指定接收数据的最大缓冲区大小。返回接收到的字节数据
  6. 关闭套接字

    • socket.close():
      • 关闭套接字,释放资源
  7. 连接到服务器

    • socket.connect(address):
      • address: 一个包含服务器 IP 地址和端口号的元组,用于连接到服务器

二、基于UDP实现客户端与服务端通信

使用socket开发的基本格式

  • socket.socket(family,type,proto)
  • family: 套接字家族可以使AF_UNIX或者AF_INET
  • type: 套接字类型可以根据是面向连接(TCP)的还是非连接分(UDP)为 SOCK_STREAM 或 SOCK_DGRAM
  • protocol: 一般不填默认为0
  • AF_INET需经过多个协议层的编解码,消耗系统cpu,并且数据传输需要经过网卡,受到网卡带宽的限制。AF_UNIX数据到达内核缓冲区后,由内核根据指定路径名找到接收方socket对应的内核缓冲区,直接将数据拷贝过去,不经过协议层编解码,节省系统cpu,并且不经过网卡,因此不受网卡带宽的限制
  • AF_UNIX的传输速率远远大于AF_INET
  • AF_INET不仅可以用作本机的跨进程通信,同样的可以用于不同机器之间的通信,其就是为了在不同机器之间进行网络互联传递数据而生。而AF_UNIX则只能用于本机内进程之间的通信

基于UDP开发服务端
UDP 服务器

import socket# 创建一个 UDP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定套接字到地址和端口
server_address = ('localhost', 10001)
server_socket.bind(server_address)print('Server is listening on port 10001...')while True:# 接收数据data, client_address = server_socket.recvfrom(1024)print(f'Received from {client_address}: {data.decode()}')# 发送响应server_socket.sendto(b'Echo: ' + data, client_address)

基于UDP开发客户端

import socket# 创建一个 UDP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 服务器地址和端口
server_address = ('localhost', 10001)try:# 发送数据message = b'Hello, Server!'client_socket.sendto(message, server_address)# 接收响应response, server_address = client_socket.recvfrom(1024)print(f'Received: {response.decode()}')
finally:# 关闭连接client_socket.close()

三、基于TCP实现客户端与服务端通信

服务端实现

import socket# 创建一个 TCP/IP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到地址和端口
server_address = ('localhost', 10000)
server_socket.bind(server_address)# 监听传入连接
server_socket.listen(5)print('Server is listening on port 10000...')while True:# 等待连接client_socket, client_address = server_socket.accept()print(f'Connection from {client_address}')try:while True:# 接收数据data = client_socket.recv(1024)if not data:breakprint(f'Received: {data.decode()}')# 发送响应client_socket.sendall(b'Echo: ' + data)finally:# 关闭连接client_socket.close()

客户端实现

import socket# 创建一个 TCP/IP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器
server_address = ('localhost', 10000)
client_socket.connect(server_address)try:# 发送数据message = b'Hello, Server!'client_socket.sendall(message)# 接收响应response = client_socket.recv(1024)print(f'Received: {response.decode()}')
finally:# 关闭连接client_socket.close()

四、使用requests模块发送http请求

  • 安装requests模块
  • 使用requests模块发送get请求
import requestsresult = requests.get("https://assets.msn.cn/service/news/feed/pages/channel?InterestIds=Y_ffca5126-f1eb-4232-a09d-0cc253506007&activityId=03B2D6CE-715C-4B69-8691-C0D960DBE69F&apikey=0QfOX3Vn51YCzitbLaRkTTBadtWpgTN8NZLW0C1SEM&cm=zh-cn&it=edgeid&memory=8&ocid=social-peregrine&scn=APP_ANON&timeOut=2000&user=m-20E3F1E5D0826EBF0ABEE2B4D1506FA8")
print(result.content.decode("utf-8"))

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

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

相关文章

[ACTF2020 新生赛]Upload 1--详细解析

信息收集 题目告诉我们是一道upload,也就是文件上传漏洞题目。 进入界面,是一个灯泡,将鼠标放在图标上就会出现文件上传的相应位置: 思路 文件上传漏洞,先看看有没有前端校验。 在js源码中找到了前端校验&#xff…

光伏设计软件怎么选?有哪些推荐?

在光伏电站的开发建设中,专业设计软件是提升电站能效、降低开发成本的重要工具。市场上存在许多优秀的光伏设计软件,能够通过还原现状和三维建模来呈现出最符合实际需求的设计方案,究竟该怎么选呢? -易用性:一些软件操…

刷题强训(day06) -- 大数加法、链表相加、大数乘法

目录 1、大数加法 1.1 题目 1.2 思路 1.3 代码实现 2、链表相加(二) 2.1 题目 2.2 思路 2.3 代码实现 3、大数乘法 3.1 题目 3.2 思路 3.3 代码实现 1、大数加法 1.1 题目 1.2 思路 这道题可以模拟列竖式相加解答, 将每一位都转…

雷池waf安装并部署防护站点

雷池waf安装并部署防护站点 最低配置要求 操作系统:Linux 指令架构:x86_64 软件依赖:Docker 20.10.14 版本以上 软件依赖:Docker Compose 2.0.0 版本以上 最小化环境:1 核 CPU / 1 GB 内存 / 5 GB 磁盘 写在前面 本文…

AI技术赋能电商行业:创新应用与未来展望

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 引言 随着科技的飞速发展,人工智能(AI)技术正逐步渗透到各行各业&a…

【Linux】进程(状态)

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各…

自动化测试框架的搭建详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 最近好多小伙伴都在说接口自动化测试,那么究竟什么是接口自动化测试呢?让我们一起往下看就知道了,首先我们得先弄清楚下面这…

重拾CSS,前端样式精读-媒体查询

前言 本文收录于CSS系列文章中,欢迎阅读指正 说到媒体查询,大家首先想到的可能是有关响应式的知识点,除此之外,它还可以用于条件加载资源,字体大小,图像和视频的优化,用户界面调整等等方面&am…

4TS Series TVS 的解析

4TS Series 400W Transient Voltage Suppressor指的是时源芯微(TimeSource)生产的一系列瞬态电压抑制二极管(Transient Voltage Suppressor,TVS),这些二极管专门设计用于保护敏感电子设备免受雷电、电源浪涌…

语义分割数据增强,图像和标签同步对应详细增强教程(附代码)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《图像增强》 &a…

本地部署 OpenHands

本地部署 OpenHands 0. 引言1. 部署 OpenHands2. 访问 OpenHands3. 验证 OpenHands 0. 引言 OpenHands 是一个由人工智能驱动的软件开发代理平台。 OpenHands 代理可以执行人类开发人员可以执行的任何操作:修改代码、运行命令、浏览网页、调用 API,甚至…

amber分子动力学

分子动力学模拟是分子模拟中最接近实验条件的模拟方法,能够从原子层面给出体系的微观演变过程,直观的展示实验现象发生的机理与规律,促使学术研究向着更高效、更经济、更有预见性的方向发展。可以解决和研究DNA的折叠和性质、蛋白与配体的识别…

丹摩征文活动 |通过Pycharm复现命名实体识别模型--MECT模型

文章目录 🍋1 引言🍋2 平台优势🍋3 丹摩平台服务器配置教程🍋4 实操案例( MECT4CNER-main)🍋4.1 MECT4CNER-main模型🍋4.2 环境配置🍋4.3 训练模型🍋4.4 数据…

嵌入式系统的利器C++

一、嵌入式 C 概述 嵌入式 C 在嵌入式系统开发中占据着至关重要的地位。它是 C 的一个子集,由日本 CPU 大厂于 1996 年提出,目标是在保持 C 面向对象特性的同时,减小代码体积、提升执行效率并简化编译器。 在嵌入式系统开发中,嵌…

【计算机网络】【网络层】【习题】

计算机网络-传输层-习题 文章目录 13. 图 4-69 给出了距离-向量协议工作过程,表(a)是路由表 R1 初始的路由表,表(b)是相邻路由器 R2 传送来的路由表。请写出 R1 更新后的路由表(c)。…

C/C++精品项目之图床共享云存储(2):MySql连接池

一:介绍 C/C精品项目之图床共享云存储(1) 我们项目的第一个文章讲解了很多的基础组件,包括线程池。我们都知道线程池是为了资源的复用,提高效率。而我们的MySql连接池也是一样的,是为了维持管理固定数量的…

网安数学基础-同余关系

文章目录 参考等价关系实例 同余同余和等价同余的运算 乘法逆元一次同余方程消去律 剩余类中国剩余定理欧拉函数欧拉定理 费马小定理 参考 【一口气学完】密码学的数学基础2,《同余关系》,一小时学完 等价关系 三角形里的全等关系 等价关系定义 下面这…

工业主板市场现状和主要市场驱动因素概述

工业主板市场是计算机硬件行业中的一个重要细分市场,专注于供应专为工业应用而设计的主板。与消费级主板不同,工业主板可承受极端条件,包括高温、连续运行以及暴露在灰尘和潮湿环境中。工业主板对于制造、自动化、医疗、国防和能源等行业中使…

舌尖上的传统美味 —— 食家巷白吉饼

第一眼看到食家巷白吉饼,就被它朴实的外表所吸引。圆润的形状,淡淡的麦色,没有过多的装饰,却散发着一种让人安心的质朴之美。 🎈拿起一个白吉饼,轻轻一掰,“咔” 的一声,那酥脆的外…

OpenHarmony-1.启动流程

OpenHarmony启动流程 1.kernel的启动 流程图如下所示:   OpenHarmony(简称OH)的标准系统的底层系统是linux,所以调用如下代码: linux-5.10/init/main.c: noinline void __ref rest_init(void) {struct task_struct *tsk;int pid;rcu_sch…