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

python socket库详解

socket是 Python 标准库中的一个模块,提供了对底层网络通信的接口,允许开发者进行网络编程。通过 socket你可以创建客户端和服务器应用程序,实现网络通信。

 1. 基本概念

- Socket:是网络通信的端点,用于在不同主机之间或同一主机上的不同进程之间进行数据传输。
- IP 地址:标识网络中的设备。
- 端口号:标识设备上的特定进程或服务。
- 协议:常用的协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。

2. 创建 Socket

使用 socket.socket()函数可以创建一个套接字对象。
import socket

# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 创建一个 UDP 套接字
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 

- socket.AF_INET:表示使用 IPv4 地址。
- socket.SOCK_STREAM:表示使用 TCP 协议。
- socket.SOCK_DGRAM:表示使用 UDP 协议。

3. TCP Socket 示例

3.1 TCP 服务器
import socket

# 创建 TCP/IP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定套接字到本地地址和端口
server_address = ('localhost', 12345)
server_socket.bind(server_address)

# 监听连接
server_socket.listen(1)
print("等待连接...")

while True:
    # 等待连接
    connection, client_address = server_socket.accept()
    try:
        print("连接来自:", client_address)

        # 接收数据
        data = connection.recv(1024)
        print("接收到数据:", data.decode())

        # 发送数据
        connection.sendall("Hello, Client!".encode())
    finally:
        # 关闭连接
        connection.close()
 

3.2 TCP 客户端
import socket

# 创建 TCP/IP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('localhost', 12345)
client_socket.connect(server_address)

try:
    # 发送数据
    message = "Hello, Server!"
    client_socket.sendall(message.encode())

    # 接收数据
    data = client_socket.recv(1024)
    print("接收到数据:", data.decode())
finally:
    # 关闭连接
    client_socket.close()

4. UDP Socket 示例

4.1 UDP 服务器
import socket

# 创建 UDP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定套接字到本地地址和端口
server_address = ('localhost', 12345)
server_socket.bind(server_address)

print("等待数据...")

while True:
    # 接收数据
    data, client_address = server_socket.recvfrom(4096)
    print("接收到数据:", data.decode())

    # 发送数据
    server_socket.sendto("Hello, Client!".encode(), client_address)

4.2 UDP 客户端
import socket

# 创建 UDP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 服务器地址
server_address = ('localhost', 12345)

try:
    # 发送数据
    message = "Hello, Server!"
    client_socket.sendto(message.encode(), server_address)

    # 接收数据
    data, server = client_socket.recvfrom(4096)
    print("接收到数据:", data.decode())
finally:
    # 关闭套接字
    client_socket.close()
 

5. Socket 常用方法

- bind(address):将套接字绑定到指定的地址和端口。
- listen(backlog):开始监听连接,backlog 指定最大连接数。
- accept():接受一个连接,返回一个新的套接字对象和客户端地址。
- connect(address):连接到指定的地址。
- send(data):发送数据。
- recv(bufsize):接收数据,bufsize指定最大接收字节数。
- sendto(data, address):发送数据到指定的地址。
- recvfrom(bufsize):接收数据,并返回数据和发送方地址。
- close():关闭套接字。

6. 异常处理

在网络编程中,可能会遇到各种异常情况,如连接超时、连接被拒绝等。可以使用 try-except块来捕获和处理这些异常。
import socket
import sys

try:
    # 创建套接字并连接
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 12345))
except socket.error as err:
    print("Socket 错误:", err)
    sys.exit(1)
finally:
    sock.close()
 

7. 总结

socket模块是 Python 网络编程的基础,通过它可以实现 TCP 和 UDP 协议的通信。掌握 socket的基本用法后,你可以进一步学习更高级的网络编程技术,如多线程服务器、异步 I/O 等。

相关文章:

python socket库详解

socket是 Python 标准库中的一个模块,提供了对底层网络通信的接口,允许开发者进行网络编程。通过 socket你可以创建客户端和服务器应用程序,实现网络通信。 1. 基本概念 - Socket:是网络通信的端点,用于在不同主机之间…...

入门基础项目-前端Vue_02

文章目录 1. 用户信息1.1 整体设计1.2 完整代码 User.vue1.2.1 数据加载1.2.2 表格 el-table1.2.2.1 多选1.2.2.2 自定义列的内容 Slot1.2.2.3 图片 el-image1.2.2.4 分页 el-pagination 1.2.3 编辑1.2.3.1 弹出框 el-dialog1.2.3.2 上传 el-upload 1.2.4 新增1.2.5 删除1.2.6 …...

为什么 Young GC 比 Full GC 快

在 JVM 中,Young GC(Minor GC)比 Full GC 快很多,主要是因为两者在内存区域、回收对象的数量、算法复杂度等方面存在本质上的区别。 内存区域的区别 Young GC(Minor GC)只发生在新生代(Young G…...

【愚公系列】《高效使用DeepSeek》009-PPT大纲自动生成

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

Qt6.8.2中JavaScript调用WebAssembly的js文件<1>

前段时间已经学习了如何在QtAssembly中编译FFmpeg资源了,接下来需要使用Html来调用QtCreator中WebAssembly套件写的功能,逐步实现javascrpt与c复杂功能的视线。 接下来我先为大家介绍一个非常简单的加法调用吧! 功能讲解 开发环境&#xf…...

【虚幻C++笔记】枚举UENUM、结构体USTRUCT

目录 枚举(UENUM)第一种:使用命名空间第二种:继承uint8通过申明class类别名来替代 结构体(USTRUCT) 枚举(UENUM) 第一种:使用命名空间 UENUM(BlueprintType) namespace MyEnumType {enum MyCustomEnum{Type1,// 或者使用带 DisplayName别名 > Enum1 UMETA(DisplayName &q…...

【mysql】centOS7安装mysql详细操作步骤!—通过tar包方式

【mysql】centOS7安装mysql详细操作步骤! linux系统安装mysql版本 需要 root 权限,使用 root 用户进行命令操作。使用tar文件包,安装,gz包也可以但是还需要配置用户,tar包虽然大,但是全啊! 1. …...

Linux 下 MySQL 8 搭建教程

一、下载 你可以从 MySQL 官方下载地址 下载所需的 MySQL 安装包。 二、环境准备 1. 查看 MySQL 是否存在 使用以下命令查看系统中是否已经安装了 MySQL: rpm -qa|grep -i mysql2. 清空 /etc/ 目录下的 my.cnf 执行以下命令删除 my.cnf 文件: [roo…...

单口路由器多拨号ADSL实现方法

条件是多拨号场景,公司路由器接口不够用...

最新版VMware 17.6.3安装包分享

修复 Windows 11 主机无响应问题:Windows 11 主机锁定或解锁后,虚拟机可能变得无响应,此问题已在 17.6.3 版本中解决。 解决虚拟机启动崩溃问题:在某些系统上启动虚拟机后,Workstation Pro 可能会崩溃,新版…...

Java高频面试之集合-12

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:HashMap 的 hash 函数是怎么设计的? HashMap的hash函数设计核心在于减少碰撞、提高数据分布均匀性,具体实现…...

视频推拉流EasyDSS案例分析:互联网直播/点播技术与平台创新应用

随着互联网技术的快速发展,直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域,互联网直播/点播平台与技术的应用,不仅为用户带来了全新的购物体验,也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…...

【黑马点评|项目】万字总结(下)

文章上半部分: 【黑马点评|项目】万字总结(上) 优惠卷秒杀 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显,容易出…...

[数据结构]排序之 直接选择排序

1 基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完 。 2 直接选择排序 : 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素…...

前端工程化之前端工程化详解 包管理工具

前端工程化详解 & 包管理工具 前端工程化什么是前端工程化前端工程化发展脚手架能力 体验度量规范流程效能流程扭转 稳定性建设针对整体稳定性建设 可监控:前端监控系统 包管理工具npm包详解package.jsonname 模块名description 模块描述信息keywords&#xff1…...

深入解析 React Diff 算法:原理、优化与实践

深入解析 React Diff 算法:原理、优化与实践 1. 引言 React 作为前端领域的标杆框架,采用 虚拟 DOM(Virtual DOM) 来提升 UI 更新性能。React 的 Diff 算法(Reconciliation) 是虚拟 DOM 运行机制的核心&a…...

Linux 蓝牙音频软件栈实现分析

Linux 蓝牙音频软件栈实现分析 蓝牙协议栈简介蓝牙控制器探测BlueZ 插件系统及音频插件蓝牙协议栈简介 蓝牙协议栈是实现蓝牙通信功能的软件架构,它由多个层次组成,每一层负责特定的功能。蓝牙协议栈的设计遵循蓝牙标准 (由蓝牙技术联盟,Bluetooth SIG 定义),支持多种蓝牙…...

PySide(PyQt),使用types.MethodType动态定义事件

以PySide(PyQt)的图片项为例,比如一个视窗的场景底图是一个QGraphicsPixmapItem,需要修改它的鼠标滚轮事件,以实现鼠标滚轮缩放显示的功能。为了达到这个目的,可以重新定义一个QGraphicsPixmapItem类,并重写它的wheelE…...

2.5 python接口编程

在现代软件开发的复杂生态系统中,不同系统、模块之间的交互协作至关重要。接口编程作为一种关键机制,定义了组件之间的通信规范与交互方式。Python 凭借其卓越的灵活性、丰富的库资源以及简洁易读的语法,在接口编程领域占据了重要地位&#x…...

SpringData JPA事务管理:@Transactional注解与事务传播

文章目录 引言一、事务基础概念二、Transactional注解详解2.1 基本用法2.2 属性配置2.3 类级别与方法级别 三、事务传播行为详解3.1 REQUIRED(默认)3.2 REQUIRES_NEW3.3 其他传播行为 四、事务隔离级别五、事务最佳实践5.1 正确设置事务边界5.2 合理使用…...

第2章、WPF窗体及其属性

1、窗体的宽与高。 2、启动窗体设置 3、窗体的启动位置设置 4、窗体图标更换 5、应用程序的图标更改 6、 7、窗体属性汇总: AllowsTransparency 类型: bool 描述: 该属性决定窗口是否可以有透明效果。如果设置为true,窗口的背景必须设置为Transpar…...

关于ModbusTCP/RTU协议对接Ethernet/IP(CIP)协议的方案

IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB,以及三菱、欧姆龙等各种品牌的PLC之间通讯,支持Ethernet/IP(CIP)、Profinet(S7),以及FINS、MC等工业自动化常用协议,同时也支持PLC与Modbus协议的工业机器人、智能仪…...

WPF 与 GMap.NET 结合实现雷达目标动态显示与地图绘制

概述 雷达上位机是雷达系统中用于数据可视化、分析和控制的核心软件。本文将介绍如何使用 C# 和 WPF 框架开发一个雷达上位机程序,主要功能包括: 显示目标轨迹:在界面上实时绘制雷达探测到的目标轨迹。点击显示详细信息:用户点击…...

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型语言模型的训练后优化综述——第2部分

3、微调(上一部分内容) 4、LLMs的对齐 大型语言模型(LLMs)中的对齐涉及引导模型输出以符合人类预期和偏好,特别是在安全关键或用户面对的应用程序中。本章讨论了实现对齐的三个主要范式: 带有反馈的人工…...

pytest快速入门 - 目录:半天掌握pytest

1 pytest快速入门 - 目录 本系列文章将快速的带领用户进入pytest领域,通过阅读本专栏,用户将可以熟练掌握pytest的基本用法,同时对测试前置条件的构造、后置条件的清理等有较深入的了解,特别是后置条件的执行完备度有一个认识。 …...

2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题C卷

目录 总体规划 模块二:设备基础信息配置 模块三:网络搭建与网络冗余备份方案部署 模块四:移动互联网搭建与网优 模块五:出口安全防护与远程接入 总体规划 CII教育公司在进行企业大学信息化建设的过程中,为了保证北京校区、广州校区与本部校区的日常OA办公通信等关键业务,…...

某大厂自动化工程师面试题

一些大厂的自动化工程师面试题汇总: 基础知识类 请解释什么是PLC(可编程逻辑控制器)?什么是PID控制?它在自动化系统中的作用是什么?请描述一下工业4.0的基本概念。编程与控制系统类 你熟悉哪些PLC编程语言?请举例说明。如何在SCADA系统中实现数据采集和监控?请解释一下…...

L1-7 统一命名规范(java)

你所在的公司刚刚招收了几位程序员,然而这些程序员之前在不同的公司工作,所以他们习惯的变量命名规范可能存在差异,需要让他们都习惯公司要求的命名规范,然而这样可能会降低他们的工作效率。 你的上司找到了你,希望你…...

ES6回顾:闭包->(优点:实现工厂函数、记忆化和异步实现)、(应用场景:Promise的then与catch的回调、async/await、柯里化函数)

闭包讲解 ES6回顾:闭包->(优点:实现工厂函数、记忆化和异步实现)、(应用场景:Promise的then与catch的回调、async/await、柯里化函数) 以下是与 JavaScript 闭包相关的常见考点整理,结合 Pro…...

zend server试用分析

文件:ZendServer-2021.4.1-multi-php-Windows_x86.exe 安装后可以试用30天,想分析下限制原理, 根据安装日志,发现了2个关键的文件: ZendServer\gui\module\Configuration\src\Configuration\License\Wrapper.php ZendServer\gu…...