python之socket编程

Socket编程是计算机网络编程的基础,它允许两台计算机(或同一个计算机的不同进程)之间进行通信。Python 提供了 socket 模块,可以很方便地进行 Socket 编程。下面是一些基本的 Socket 编程示例,包括 TCP 和 UDP。

TCP Socket 编程

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

服务器端
import socket# 创建一个 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)# 开始监听
server_socket.listen(5)
print('Server listening on', server_address)while True:# 等待连接print('Waiting for a connection...')connection, client_address = server_socket.accept()try:print('Connection from', client_address)# 接收数据while True:data = connection.recv(1024)if data:print('Received', repr(data))# 发送数据connection.sendall(data)else:breakfinally:# 清理连接connection.close()
客户端
import socket# 创建一个 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器
server_address = ('localhost', 65432)
client_socket.connect(server_address)try:# 发送数据message = 'This is the message. It will be echoed back.'print('Sending', repr(message))client_socket.sendall(message)# 接收数据amount_received = 0amount_expected = len(message)while amount_received < amount_expected:data = client_socket.recv(1024)amount_received += len(data)print('Received', repr(data))finally:# 清理连接client_socket.close()

UDP Socket 编程

UDP(用户数据报协议)是一个简单的面向数据报的传输层协议。它不保证数据包的顺序、可靠性或完整性。

服务器端
import socket# 创建一个 socket 对象
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定地址和端口
server_address = ('localhost', 10000)
sock.bind(server_address)print('Starting UDP server')while True:# 接收数据print('Waiting to receive message')data, address = sock.recvfrom(4096)  # 缓冲区大小是 4096 字节print('Received {} bytes from {}'.format(len(data), address))print('Data: {}'.format(data))if data:sent = sock.sendto(data, address)  # 将接收到的数据发送回去print('Sent {} bytes back to {}'.format(sent, address))
客户端
import socket
import time# 创建一个 socket 对象
MESSAGE = 'This is the message.'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 连接到服务器
server_address = ('localhost', 10000)try:# 发送数据print('Sending: {}'.format(MESSAGE))sent = sock.sendto(MESSAGE.encode(), server_address)# 接收响应time.sleep(1)  # 等待一秒以确保服务器有时间处理请求data, server = sock.recvfrom(4096)print('Received: {}'.format(data.decode()))finally:# 清理连接print('Closing socket')sock.close()

注意事项

  1. 异常处理:在实际应用中,应添加更多的异常处理,以确保程序的健壮性。
  2. 并发:对于多个客户端连接,可以使用多线程或异步编程来处理。
  3. 资源管理:确保在程序结束时正确关闭所有的 socket 连接。

以上是一些基础的 Python Socket 编程示例,希望对你有所帮助。

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

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

相关文章

Docker 的安全配置与优化(二)

Docker 安全优化策略 &#xff08;一&#xff09;多阶段构建优化镜像大小 多阶段构建是 Docker 17.05 版本引入的强大功能&#xff0c;它允许在一个 Dockerfile 中定义多个构建阶段&#xff0c;每个阶段都可以使用不同的基础镜像和依赖项&#xff0c;最终只将必要的文件和依赖…

欧洲跨境组网专线:企业出海的高效网络解决方案

在全球化的背景下&#xff0c;越来越多的企业将业务拓展至海外市场&#xff0c;并在欧洲等地设立分支机构。然而&#xff0c;跨境办公中常常面临公网网络延迟高、打开速度慢、丢包严重等问题&#xff0c;这不仅影响办公效率&#xff0c;还增加了IT维护的难度和成本。针对这一痛…

面阵工业相机提高餐饮业生产效率

餐饮行业是一个快节奏、高要求的领域&#xff0c;该领域对生产过程中每一个阶段的效率和准确性都有很高的要求。在食品加工、包装、质量控制和库存管理等不同生产阶段实现生产效率的优化是取得成功的关键步骤。面阵工业相机能够一次性捕捉对象的二维区域图像&#xff0c;并支持…

Renesas RH850 IAR编译时变量分配特定内存

文章目录 1. 核心作用2. 典型使用场景3. 示例代码4. 编译器与链接脚本协作5. 注意事项6. 调试验证在RH850系列微控制器的开发中,#pragma location = "FIRST_RAM" 是一条编译器指令,其核心含义是 将变量或函数分配到名为 FIRST_RAM 的特定内存段。以下是详细解释: …

C++面试题,进程和线程方面(1)

文章目录 前言进程和线程有什么不同进程&#xff0c;线程的通讯方式什么是锁为什么说锁可以使线程安全加锁有什么副作用总结 前言 这是个人总结进程和线程方面的面试题。如果有错&#xff0c;欢迎佬们前来指导&#xff01;&#xff01;&#xff01; 进程和线程有什么不同 进程…

视频mp4垂直拼接 水平拼接

视频mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 获取目录下的所有视频文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…

Unity摄像机与灯光相关知识

一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件&#xff0c;例如用Cube对象来举例 1.Sphere(Mesh)组件&#xff1a; 用来决定对象的网格属性&#xff0c;例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件&#xff1a; 用来设置…

C++(17):为optional类型构造对象

C++(17):optional,多了一个合理的选择_c++17 max-CSDN博客 介绍了optional做为函数返回值的一种方式 其实optional也可以作为对象来使用 #include &

探索关键领域的AI工具:机器学习、深度学习、计算机视觉与自然语言处理

引言 在人工智能(AI)迅猛发展的今天&#xff0c;机器学习(ML)、深度学习(DL)、计算机视觉(CV)和自然语言处理(NLP)已经成为解决复杂问题的关键技术。无论是自动驾驶车辆的视觉识别&#xff0c;还是智能助手的对话理解&#xff0c;这些技术都在改变着世界。本文将介绍在各个领域…

基于vue和微信小程序的校园自助打印系统(springboot论文源码调试讲解)

第3章 系统设计 3.1系统功能结构设计 本系统的结构分为管理员和用户、店长。本系统的功能结构图如下图3.1所示&#xff1a; 图3.1系统功能结构图 3.2数据库设计 本系统为小程序类的预约平台&#xff0c;所以对信息的安全和稳定要求非常高。为了解决本问题&#xff0c;采用前端…

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择&#xff1a; CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集&#xff0c;用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目&#xff0c;旨在提供类Uni…

MKS SERVO42E57E 闭环步进电机_系列10 STM32_脉冲和串口例程

文章目录 第1部分 产品介绍第2部分 相关资料下载2.1 MKS E系列闭环步进驱动资料2.2 源代码下载2.3 上位机下载 第3部分 脉冲控制电机运行示例第4部分 读取参数示例4.1 读取电机实时位置4.2 读取电机实时转速4.3 读取电机输入脉冲数4.4 读取电机位置误差4.5 读取电机IO端口状态 …

【宏基因组】MaAsLin2

教学手册&#xff1a;学习手册 MaAsLin2 # BiocManager::install("Maaslin2",force TRUE)library(Maaslin2) # 用的是相对丰度&#xff0c;行名为-ID行样本,列为细菌 input_data system.file("extdata", "HMP2_taxonomy.tsv", package"…

【消息队列】认识项目

1. 项目介绍 该项目是去实现一个简单的消息队列&#xff0c;包含服务器&#xff0c;客户端的实现&#xff0c;客户端通过远程方法调用与服务器进行交互。采用自定义应用层协议&#xff0c;下层使用 TCP 协议进行数据在网络中传输&#xff0c;核心功能提供了虚拟主机&#xff0…

vue从入门到精通(十一):条件渲染

条件渲染 1.v-if 写法: (1).v-if“表达式” (2).v-else-if“表达式” (3).v-else“表达式” 适用于:切换频率较低的场景。 特点:不展示的DOM元素直接被移除。 注意:v-if可以和:v-else-if、v-else一起使用&#xff0c;但要求结构不能被“打断” 2.v-show 写法:v-show“…

Python爬虫基础文件操作

文件操作 引言 爬虫爬取的一切内容都是在内存进行的&#xff0c;这样会有什么问题吗&#xff1f;如果一旦短电或着发生意外电脑关机了那么你的工作成果将瞬间消失。所以&#xff0c;我们还缺少数据在本地文件系统进行持久化的能力&#xff0c;简单的来说就是文件读写操作。文…

OpenCV中的边缘检测

边缘检测是图像处理和计算机视觉中的关键技术之一&#xff0c;旨在识别图像中像素强度发生显著变化的区域&#xff0c;这些区域通常对应于物体的边界或轮廓。边缘检测在机器视觉中具有重要的需求背景&#xff0c;主要体现在以下几个方面&#xff1a; 图像分割&#xff1a;边缘…

【简历优化】性能调优 — 编程性能调优篇

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解【简历优化】性能调优 — 编程性能调优篇&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目录 一、编程性能调优字符串String 发展优…

深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程

MySQL 作为最流行的关系型数据库之一&#xff0c;其内部实现机制一直是开发者探索的热点。本文将以一条简单的 SQL 查询 SELECT MOD(MONTH(NOW()), 2) 为例&#xff0c;深入分析 MySQL 8 源码中内置函数 MOD、MONTH 和 NOW 的执行过程&#xff0c;揭示其底层实现逻辑。 一、SQL…

RNN中远距离时间步梯度消失问题及解决办法

RNN中远距离时间步梯度消失问题及解决办法 RNN 远距离时间步梯度消失问题LSTM如何解决远距离时间步梯度消失问题 RNN 远距离时间步梯度消失问题 经典的RNN结构如下图所示&#xff1a; 假设我们的时间序列只有三段&#xff0c; S 0 S_{0} S0​ 为给定值&#xff0c;神经元没有…