Python3 网络编程详解

概述

Python 提供了丰富的网络编程支持,包括低级别的 Socket 编程和高级别的 SocketServer 模块。本文将详细介绍如何在 Python 中使用 Socket 进行网络编程,并通过具体的代码示例来展示服务器和客户端的实现。

什么是 Socket?

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

Socket 编程基础
1. 创建 Socket

在 Python 中,我们使用 socket() 函数来创建套接字。语法格式如下:

socket.socket([family[, type[, proto]]])
  • family:套接字家族可以是 AF_UNIX 或者 AF_INET
  • type:套接字类型可以是 SOCK_STREAM(面向连接的 TCP)或 SOCK_DGRAM(无连接的 UDP)。
  • proto:一般不填,默认为 0。
2. 常用的 Socket 方法
方法描述
s.bind(address)绑定地址(host, port)到套接字。
s.listen(backlog)开始 TCP 监听。backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量。
s.accept()被动接受 TCP 客户端连接,返回 (conn, address),其中 conn 是新的套接字对象,address 是客户端地址。
s.connect(address)主动初始化 TCP 服务器连接。
s.connect_ex(address)connect() 函数的扩展版本,出错时返回出错码,而不是抛出异常。
s.recv(bufsize[, flags])接收 TCP 数据,返回值是接收到的数据。
s.send(string[, flags])发送 TCP 数据,返回值是发送的字节数。
s.sendall(string[, flags])完整发送 TCP 数据,成功返回 None,失败抛出异常。
s.recvfrom(bufsize[, flags])接收 UDP 数据,返回值是 (data, address)。
s.sendto(string, address)发送 UDP 数据到指定地址。
s.close()关闭套接字。
s.getpeername()返回连接套接字的远程地址。
s.getsockname()返回套接字自己的地址。
s.setsockopt(level, optname, value)设置给定套接字选项的值。
s.getsockopt(level, optname[, buflen])返回套接字选项的值。
s.settimeout(timeout)设置套接字操作的超时期。
s.gettimeout()返回当前超时期的值。
s.fileno()返回套接字的文件描述符。
s.setblocking(flag)设置套接字为阻塞或非阻塞模式。
s.makefile()创建一个与该套接字相关联的文件对象。
简单实例
1. 服务端

服务端代码如下:

#!/usr/bin/python3
# 文件名:server.py# 导入 socket、sys 模块
import socket
import sys# 创建 socket 对象
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名
host = socket.gethostname()# 设置端口号
port = 9999# 绑定端口号
serversocket.bind((host, port))# 设置最大连接数,超过后排队
serversocket.listen(5)while True:# 建立客户端连接clientsocket, addr = serversocket.accept()print("连接地址: %s" % str(addr))msg = '欢迎访问菜鸟教程!' + "\r\n"clientsocket.send(msg.encode('utf-8'))clientsocket.close()
  • import socket:导入 socket 模块。
  • import sys:导入 sys 模块。
  • serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM):创建一个 TCP 套接字对象。
  • host = socket.gethostname():获取本地主机名。
  • port = 9999:设置端口号。
  • serversocket.bind((host, port)):将套接字绑定到指定的地址和端口。
  • serversocket.listen(5):开始监听,最多允许 5 个连接排队。
  • while True::无限循环,等待客户端连接。
  • clientsocket, addr = serversocket.accept():接受客户端连接,返回新的套接字对象和客户端地址。
  • print("连接地址: %s" % str(addr)):打印客户端地址。
  • msg = '欢迎访问菜鸟教程!' + "\r\n":准备发送的消息。
  • clientsocket.send(msg.encode('utf-8')):发送消息。
  • clientsocket.close():关闭客户端连接。
2. 客户端

客户端代码如下:

#!/usr/bin/python3
# 文件名:client.py# 导入 socket、sys 模块
import socket
import sys# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名
host = socket.gethostname()# 设置端口号
port = 9999# 连接服务,指定主机和端口
s.connect((host, port))# 接收小于 1024 字节的数据
msg = s.recv(1024)s.close()print(msg.decode('utf-8'))
  • import socket:导入 socket 模块。
  • import sys:导入 sys 模块。
  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM):创建一个 TCP 套接字对象。
  • host = socket.gethostname():获取本地主机名。
  • port = 9999:设置端口号。
  • s.connect((host, port)):连接到指定的主机和端口。
  • msg = s.recv(1024):接收不超过 1024 字节的数据。
  • s.close():关闭套接字。
  • print(msg.decode('utf-8')):打印接收到的消息。
测试
  1. 打开第一个终端,运行服务端代码:

    $ python3 server.py
    
  2. 打开第二个终端,运行客户端代码:

    $ python3 client.py
    

    客户端终端会输出:

    欢迎访问菜鸟教程!
    
  3. 查看第一个终端,会看到有以下信息输出:

    连接地址: ('192.168.0.118', 33397)
    
Python Internet 模块

Python 提供了许多用于网络编程的模块,以下是常用的几个模块及其功能:

协议功能用处端口号Python 模块
HTTP网页访问80http.client, urllib, xmlrpc.client
NNTP阅读和张贴新闻文章,俗称为"帖子"119nntplib
FTP文件传输20ftplib, urllib
SMTP发送邮件25smtplib
POP3接收邮件110poplib
IMAP4获取邮件143imaplib
Telnet命令行23telnetlib
Gopher信息查找70gopherlib, urllib
总结

本文详细介绍了如何在 Python 中使用 Socket 进行网络编程,并通过具体的代码示例展示了服务器和客户端的实现。通过使用 socket 模块,我们可以创建和管理套接字,实现基本的网络通信功能。


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

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

相关文章

【数据分享】2024年我国省市县三级的休闲娱乐设施数量(免费获取/18类设施/Excel/Shp格式)

KTV、棋牌室、音乐厅等休闲服务设施的配置情况是一个城市公共基础设施完善程度的重要体现,一个城市休闲服务设施种类越丰富,数量越多,通常能表示这个城市的公共服务水平越高! 本次我们为大家带来的是我国各省份、各地级市、各区县…

什么是软件设计模式, 它们⽤于解决什么问题, 它们为什么有效

什么是设计模式 软件设计模式是指在软件设计过程中,经过验证的、可复⽤的、对特定 场景下常⻅问题的解决⽅案的⼀种描述或模板。这些模式并不是具体的 代码,⽽是⽤于指导如何组织代码、类和对象,以便更好地解决问题和 满⾜需求。 ⽤于解决的…

串口接收,不定长数据接收

###1.CUBE-MX配置串口 2.我采用串口中断接收,打开中断接口 3.时钟同样8倍频,1分频,使用内部时钟 打开串口中断 main() { __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); // 启用空闲中断__HAL_UART_ENABLE_IT(&huart1, UART_IT_R…

海滨学院班级记忆宝盒:设计与实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

分布式集群本地缓存

在 Java 分布式集群微服务项目中,虽然 Redis 等分布式缓存更常用,但在某些特定场景下,本地缓存依然有较好的应用价值。常用的本地缓存工具主要有以下几种: 1. Caffeine 简介:Caffeine 是一个现代化的高性能 Java 本地…

如何在Linux系统中使用SSH进行安全连接

如何在Linux系统中使用SSH进行安全连接 SSH简介 安装SSH 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动SSH服务 验证SSH是否安装成功 SSH配置 配置监听端口 配置登录方式 SSH客户端 安装SSH客户端 使用SSH客户端 SSH密钥认证 生成SSH密钥对 复制公钥到远程服务器…

Maven(26)如何使用Maven进行持续集成?

使用Maven进行持续集成(Continuous Integration, CI)通常涉及设置一个CI服务器,如Jenkins,并配置Maven项目以自动构建和测试。以下是一个详细的步骤指南,包括如何在Jenkins中设置Maven项目: 步骤 1: 安装和…

使用 Elasticsearch 进行语义搜索

Elasticsearch 是一款功能强大的开源搜索引擎,可用于全文搜索、分析和数据可视化。传统上,Elasticsearch 以其执行基于关键字/词汇的搜索的能力而闻名,其中文档基于精确或部分关键字匹配进行匹配。然而,Elasticsearch 已经发展到支…

ElasticNet Regressor(弹性网络回归) --- 论文实战

一、前言 在《机器学习论文复现实战---linear regression》中通过Pearson 相关性分析,去除了2个高相关性特征 "PN" 和 "AN" ,数据维度变为890*25。(数据集地址) 这里我们不做如何前期处理,直接就将数据放入 ElasticNet 模型中进行训练了。 二、模型训…

OJ-5G网络建设

示例1 输入: 3 3 1 2 3 0 1 3 1 0 2 3 5 0 输出: 4示例2 输入: 3 1 1 2 5 0 输出: -1 示例3 输入: 3 3 1 2 3 0 1 3 1 0 2 3 5 1 输出: 1 分析:压缩路径 顺序:1 2;…

Kubeadm搭建k8s

一、架构 节点名称规格IP地址安装组件master012C/4G,cpu核心数要求大于2192.168.88.76docker、kubeadm、kubelet、kubectl、flannelnode012C/2G192.168.88.20docker、kubeadm、kubelet、kubectl、flannelnode022C/2G192.168.88.21docker、kubeadm、kubelet、kubect…

Ubuntu 安装 redis

一、使⽤apt安装 apt install redis -y 二、⽀持远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 为 bind 0.0.0.0修改 protected-mode yes 为 protected-mode no # By default, if no "bind" configuration directive is specified, Redis listens# fo…

Vue常用的修饰符有哪些?

修饰符(Modifiers)是用于指定以特殊方式绑定或处理Vue事件或指令的特殊符号。 事件修饰符 .stop: 阻止时间继续传播,相当于调用event.stopPropagation() .prevent: 阻止默认事件,相当于调用event.preventDefault() .capture: 使…

WordPress伪静态设置

为什么要设置WordPress伪静态,搜索引擎优化(SEO)中,静态URL通常被认为更易于搜索引擎爬虫抓取和索引,有助于提高网站的搜索引擎排名。 WordPress伪静态设置方法主要依赖于服务器环境,以下是针对不同服务器…

【简道云 -注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【系统架构设计师】2023年真题论文: 论面向对象分析的应用与实现(包括解题思路和素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2023年 试题1)解题思路面向对象分析的概念与核心技术面向对象分析的流程面向对象分析的应用案例论文素材参考真题题目(2023年 试题1) 面向对象设计是一种软件设计方法,它将系统看作一组相互作用的对…

太速科技-712-6U VPX飞腾处理器刀片计算机

6U VPX飞腾处理器刀片计算机 一、产品概述 该产品是一款基于国产飞腾FT-2000四核处理器或D2000八核处理器的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道,其中P1、P2均支持1个PCIe x16 Gen3或2个PCIe x8 Gen3或4个PCIe x4 Gen3总…

安卓设备adb执行AT指令控制电话卡

文章目录 AT指令起源与发展:基本格式:常见应用领域及功能:不同设备中的应用: 安卓获取modem设备输入符入口安卓设备输入AT指令 AT指令 AT 指令是 Attention 的缩写,是一种用于控制调制解调器等通信设备的指令集。 起…

uniapp项目 存储数据到手机本地

打开manifest.json&#xff0c;在App权限配置中&#xff0c;添加读取和写入的权限 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&g…

在 VS Code 中规范化 Git 提交消息并自动生成 CHANGELOG.md

1. 使用 Commitizen 规范化 Git 提交消息 首先&#xff0c;安装 Commitizen 和适用于 Angular 提交规范的适配器&#xff1a; npm install -g commitizen commitizen init cz-conventional-changelog --save-dev --save-exact这样&#xff0c;提交信息将遵循 Angular 规范&am…