当前位置: 首页 > news >正文

Python知识点:如何使用Socket模块进行网络编程

Python 的 socket 模块提供了一个底层网络接口,允许你通过编程进行网络通信。使用 socket 模块可以编写客户端和服务器端程序,从而实现数据在网络上的传输。以下是如何使用 socket 模块进行网络编程的详细说明。

1. 创建一个 Socket

首先,你需要创建一个 socket 对象。Socket 是网络通信的端点,可以是 TCP 或 UDP 的。

import socket# 创建一个 TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 或者创建一个 UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  • socket.AF_INET 表示使用 IPv4 地址。
  • socket.SOCK_STREAM 表示使用 TCP 协议。
  • socket.SOCK_DGRAM 表示使用 UDP 协议。

2. 实现一个简单的 TCP 客户端

以下是如何实现一个简单的 TCP 客户端,该客户端连接到服务器并发送消息:

import socket# 创建一个 TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器(指定 IP 地址和端口号)
server_address = ('localhost', 8080)
client_socket.connect(server_address)try:# 发送数据message = 'Hello, Server!'client_socket.sendall(message.encode('utf-8'))# 接收响应data = client_socket.recv(1024)print(f'Received: {data.decode("utf-8")}')
finally:# 关闭连接client_socket.close()

3. 实现一个简单的 TCP 服务器

以下是如何实现一个简单的 TCP 服务器,该服务器监听特定端口,接受客户端的连接,并处理其发送的消息:

import socket# 创建一个 TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定 IP 地址和端口
server_address = ('localhost', 8080)
server_socket.bind(server_address)# 监听传入的连接(允许最多 5 个连接)
server_socket.listen(5)
print(f'Server is listening on {server_address[0]}:{server_address[1]}')while True:# 接受连接client_socket, client_address = server_socket.accept()try:print(f'Connection from {client_address}')# 接收数据data = client_socket.recv(1024)if data:print(f'Received: {data.decode("utf-8")}')# 发送响应回客户端client_socket.sendall(b'Hello, Client!')finally:# 关闭连接client_socket.close()

4. 使用 UDP 进行通信

UDP 是无连接的,因此你不需要像 TCP 一样建立连接。以下是一个简单的 UDP 客户端和服务器的例子。

UDP 客户端
import socket# 创建一个 UDP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 服务器的 IP 地址和端口
server_address = ('localhost', 8080)# 发送数据
message = 'Hello, UDP Server!'
client_socket.sendto(message.encode('utf-8'), server_address)# 接收响应
data, server = client_socket.recvfrom(1024)
print(f'Received: {data.decode("utf-8")}')# 关闭 socket
client_socket.close()
UDP 服务器
import socket# 创建一个 UDP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定 IP 地址和端口
server_address = ('localhost', 8080)
server_socket.bind(server_address)print(f'UDP Server is listening on {server_address[0]}:{server_address[1]}')while True:# 接收数据data, client_address = server_socket.recvfrom(1024)print(f'Received: {data.decode("utf-8")} from {client_address}')# 发送响应回客户端if data:sent = server_socket.sendto(b'Hello, UDP Client!', client_address)

5. 处理异常和错误

在实际的网络编程中,异常处理非常重要。你可以使用 try-except 块来捕获和处理异常,例如连接失败、数据传输错误等。

import sockettry:# 创建并连接 socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(('localhost', 8080))# 发送数据client_socket.sendall(b'Hello, Server!')# 接收响应data = client_socket.recv(1024)print(f'Received: {data.decode("utf-8")}')except socket.error as e:print(f'Socket error: {e}')finally:# 确保 socket 被关闭client_socket.close()

6. 设置 Socket 选项

你可以设置一些 socket 选项来控制其行为,例如,设置 SO_REUSEADDR 允许重用本地地址。

import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

7. 总结

Python 的 socket 模块提供了一个强大的接口,可以用来构建客户端和服务器应用程序。通过 TCP 或 UDP,你可以进行可靠的面向连接的通信,或者使用无连接的方式传输数据。

  • TCP: 适用于需要可靠传输的数据,如文件传输、HTTP 等。
  • UDP: 适用于对速度要求高、对数据可靠性要求不高的应用,如视频流、游戏等。

处理异常、设置 socket 选项以及根据需求选择合适的协议,可以帮助你构建更稳定和高效的网络应用程序。

相关文章:

Python知识点:如何使用Socket模块进行网络编程

Python 的 socket 模块提供了一个底层网络接口,允许你通过编程进行网络通信。使用 socket 模块可以编写客户端和服务器端程序,从而实现数据在网络上的传输。以下是如何使用 socket 模块进行网络编程的详细说明。 1. 创建一个 Socket 首先,你…...

培训第二十一天(mysql用户创建与授权、角色创建)

上午 1、环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf[rootmysql ~]# yum -y remove mariadb //移除mariadb[rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留文件 2、安装mysql绿包 [rootmysql ~]…...

makefile基本语法

在编写复杂的程序项目时,Makefile 是一个非常有用的工具,它能自动化构建过程。以下是一些基本的 Makefile 语法介绍: 基本结构: target: dependenciescommandtarget:构建目标,通常是一个文件,如…...

白骑士的PyCharm教学实战项目篇 4.4 大数据处理与分析

系列目录 上一篇:白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成​​​​​​​ 随着数据量的爆炸性增长,大数据处理与分析成为现代数据科学的重要课题。PyCharm提供了强大的功能,可以帮助开发者高效地进行大数据环境的配置与连接…...

无人机之民用无人机用途分类篇

一、航拍无人机 用于航拍摄影和电影制作,提供空中视角的拍摄服务。可用于电影制作、广告拍摄、房地产销售等。 二、物流无人机 用于快递和货物运输,提高物流效率,可以到达传统配送方式难以覆盖的地区,在突发事件如自然灾害、疫…...

Android10 修改设备名称

A10和A12的设备名称修改是不同的,A10设备名称修改分好几个位置 修改wifi默认名称 在framework/base模块下 diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 9041a7c3a14..7a1e63688c4 100644 --- a/core/res/res/values/…...

go testing 包

Go语言的testing包提供了一套丰富的测试工具,用于编写和运行测试用例。以下是testing包中一些常用的函数和类型: func TestMain(m *testing.M): 这是一个特殊的函数,用于执行测试的主函数。如果定义了TestMain,那么在运行go test时…...

基于phpstudy的靶场搭建和github加速

微软商店下载 watt toolkit,然后在侧边栏选择网络加速,勾选 github,就可以快速访问 github 1、下载搭建 sqlilabs github 找到 sqlilabs 靶场,点击 code,下载 zip解压之后,整体移动到 phpstudy_pro 文件夹…...

【数据结构】Map与Set

前言 前两篇文章我们研究了二叉搜索树与哈希表的结构与特点,他们二者是Map与Set这两个接口实现的底层结构,他们利用了搜索树与哈希表查找效率高这一特点,是一种专门用来进行搜索操作的容器或数据结构。本篇文章就让我们一起来梳理这两个接口的…...

Flamingo: a Visual Language Model for Few-Shot Learning

发表时间:NeurIPS 2022 论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位:DeepMind Motivation:仅使用少量注释示例可以快速适应新任务…...

flume性能调优

作者&#xff1a;南墨 1.Source性能调优 1.1 Spooldir Source 使用Spooldir Source采集日志数据时&#xff0c;若每行日志数据<100bp&#xff0c;可以通过将多行合并传输来提升传输性能 建议合并时根据数据长度来确定多少行合并为一个单位进行传输&#xff0c;合并后的长…...

mysql 字符串转数组

在 MySQL 中&#xff0c;可以使用内置的字符串函数 SUBSTRING_INDEX() 和 REPLACE() 来实现将字符串转换为数组。 首先&#xff0c;使用 REPLACE() 函数将字符串中的分隔符替换为空格&#xff0c;然后使用 SUBSTRING_INDEX() 函数将字符串按空格分割成多个子字符串。最后&…...

UE基础 —— 术语

目录 Project Blueprint Class Object Actor Casting Component Pawn Character Player Controller AI Controller Player State Game Mode Game State Brush Volume Level World Project 项目&#xff08;Project&#xff09;包含游戏的所有内容&#xff0c…...

kubernets学习笔记——使用kubeadm构建kubernets集群及排错

使用kubeadm构建kubernets集群 一、准备工作1、repo源配置&#xff1a;阿里巴巴开源镜像源2、更新软件包并安装必要的系统工具3、同步时间4、禁用selinux5、禁用交换分区swap6、关闭防火墙 二、安装docker-ce、docker、cri-docker1、安装docker-ce2、开启内核转发&#xff0c;转…...

简述MYSQL聚簇索引、二级索引、索引下推

一丶聚簇索引 InnoDB的索引分为两种&#xff1a; 聚簇索引&#xff1a;一般创建表时的主键就会被mysql作为聚簇索引&#xff0c;如果没有主键则选择非空唯一索引作为聚簇索引&#xff0c;都没有则隐式创建一个索引作为聚簇索引&#xff1b;辅助索引&#xff1a;也就是非聚簇索…...

电脑开机后出现bootmgr is missing原因及解决方法

最近有网友问我为什么我电脑开机后出现bootmgr is missing&#xff0c;这个提示意思是:意思是启动管理器丢失&#xff0c;说明bootmgr损坏或者丢失&#xff0c;系统无法读取到这个必要的启动信息导致无法启动。原因有很多&#xff0c;比如我们采用的是uefi引导&#xff0c;而第…...

2024 年 7 月公链行业研报:市场波动中 Solana 表现抢眼,Layer 2 竞争白热化

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 公链 Research 页面 7 月份&#xff0c;加密货币市场表现活跃&#xff0c;波动幅度较大&#xff0c;这一现象映射了全球金融市场的整体趋势。现货以太坊 ETP 在美国的上市&…...

Python查缺補漏

一、 json.load(s)与json.dump(s)区别 json.loads()将str类型的数据转换为dict类型 json.dumps()将dict类型的数据转成str json.load()从json文件中读取数据 json.dump()将数据以json的数据类型写入文件中 二、json内部要使用双引号 data """{ "fruit&qu…...

c++的类和对象(中):默认成员函数与运算符重载(重难点!!)

前言 Hello, 小伙伴们&#xff0c;我们今天继续c的学习&#xff0c;我们上期有介绍到c的部分特性&#xff0c;以及一些区别于c语言的地方&#xff0c;今天我们将继续深入了解c的类和对象&#xff0c;探索c的奥秘。 好&#xff0c;废话不多说&#xff0c;开始我们今天的学习。…...

Android .kl按键布局文件

1.介绍 一个硬件按键的处理流程大致为&#xff1a;当用户按下或释放一个键时&#xff0c;键盘硬件会生成一个扫描码scan code&#xff0c;然后操作系统读取这个scan code&#xff0c;并将scan code扫描码映射到虚拟键码key code&#xff0c;最后操作系统根据映射的keycode生成…...

思科故障排查命令 TOP50

在网络运维这行干久了,你会发现一个很现实的事情:90% 的故障,其实靠“几条命令”就能定位. 但问题是——很多人不是不会,而是: 想不起来用哪个命令 不知道该从哪一步查 查了但不会“看输出” 所以这篇文章,我不单是给你列命令,而是帮你建立一个: 👉 “排查思路 + 命…...

如何通过智能辅助提升原神游戏体验:BetterGI全方位解决方案

如何通过智能辅助提升原神游戏体验&#xff1a;BetterGI全方位解决方案 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游…...

医美可视化新体验:Face3D.ai Pro帮你“预览”术后3D效果

医美可视化新体验&#xff1a;Face3D.ai Pro帮你"预览"术后3D效果 关键词&#xff1a;3D人脸重建、医美效果预览、面部整形模拟、Face3D.ai Pro、AI医美咨询 摘要&#xff1a;在医美行业&#xff0c;客户最常问的问题是"我做完会变成什么样&#xff1f;"…...

手把手教你用Simulink复现EKF电池SOC估算模型(附完整模型文件)

从理论到实践&#xff1a;Simulink实现EKF电池SOC估算全流程解析 锂离子电池作为现代储能系统的核心组件&#xff0c;其荷电状态&#xff08;SOC&#xff09;的精确估算直接关系到电池管理系统的可靠性和安全性。扩展卡尔曼滤波&#xff08;EKF&#xff09;算法因其优秀的非线性…...

Spring_couplet_generation 模型推理性能优化:操作系统级调优指南

Spring_couplet_generation 模型推理性能优化&#xff1a;操作系统级调优指南 想让你的春联生成模型跑得更快、更稳吗&#xff1f;很多朋友在部署AI模型时&#xff0c;往往只关注模型本身和代码&#xff0c;却忽略了承载这一切的“地基”——操作系统。今天&#xff0c;我们就…...

ABAP开发必备:5种处理前导0的实战技巧(附SQL代码示例)

ABAP开发必备&#xff1a;5种处理前导0的实战技巧&#xff08;附SQL代码示例&#xff09; 在SAP ABAP开发中&#xff0c;物料号、供应商号等关键字段经常需要处理前导0的问题。这些看似简单的数字格式差异&#xff0c;却可能引发数据查询失败、报表统计错误等一系列"蝴蝶效…...

Anaconda环境管理:为Phi-4-mini-reasoning 3.8B创建独立的Python开发环境

Anaconda环境管理&#xff1a;为Phi-4-mini-reasoning 3.8B创建独立的Python开发环境 1. 为什么需要独立环境&#xff1f; 在数据科学和机器学习项目中&#xff0c;环境隔离是个经常被忽视但极其重要的问题。想象一下这样的场景&#xff1a;你花了两周时间调试一个模型&#…...

Windows 11 家庭版安装 WSL + Docker 踩坑记:从 Store 地狱到 --web-download 救赎

一句话总结当你发现 wsl --update 和 wsl --install 永远卡住、报权限错误或连接重置时&#xff0c;不要挣扎&#xff0c;直接用 --web-download 绕过 Microsoft Store。 这 99% 能解决 Windows 11 家庭版上的 WSL 安装/更新问题。一、问题现象&#xff1a;一切看起来都很正常&…...

深入理解请求限流算法的实现细节

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

【独家首发】CPython内存管理策略白皮书(基于v3.9–v3.13源码比对):37处关键宏定义、12个GC阈值参数、8类对象内存布局差异

第一章&#xff1a;CPython内存管理策略全景概览CPython 作为 Python 官方解释器&#xff0c;其内存管理机制融合了引用计数、循环垃圾回收&#xff08;GC&#xff09;与分代回收策略&#xff0c;形成一套兼顾实时性与鲁棒性的综合体系。理解该机制对诊断内存泄漏、优化对象生命…...