python UDP、TCP 示例

news/2024/5/18 16:00:03 标签: python, udp, tcp/ip

👨‍💻个人简介: 深度学习图像领域工作者
🎉总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
                    📌1.工作中常用深度学习脚本
                    📌2.torch、numpy等常用函数详解
                    📌3.opencv 图片、视频等操作
                    📌4.个人工作中的项目总结(纯干活)
              链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
              B站:Python图像识别
              抖音:Python图像识别
              西瓜视频:Python图像识别


1. UDP

UDP是一种无连接的、不可靠的传输协议,相比于TCP,UDP具有数据传输速度快、传输延迟小等优点,但是不保证数据的可靠传输,需要应用层进行数据重传、校验等处理。

下面是一个简单的UDP发送示例代码:

python">import socket

UDP_IP = '127.0.0.1'   # 目标IP地址
UDP_PORT = 5005        # 目标端口号
MESSAGE = b"Hello, World!"   # 要发送的数据

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

# 发送数据
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

# 关闭套接字
sock.close()

下面是一个简单的UDP接收示例代码:

python">import socket

UDP_IP = '127.0.0.1'   # 监听IP地址
UDP_PORT = 5005        # 监听端口号

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

# 绑定套接字到指定IP地址和端口号
sock.bind((UDP_IP, UDP_PORT))

# 接收数据
data, addr = sock.recvfrom(1024)   # 一次最多接收1024字节的数据

print("Received message:", data)

# 关闭套接字
sock.close()

需要注意的是,在UDP通信中,由于数据包的大小限制,可能需要对发送的数据进行分片处理,同时也需要对接收到的数据进行缓存和拼接处理,以保证数据的完整性。

在IPv4网络中,UDP数据包的最大长度为64KB(65535字节),其中包括IP头部和UDP头部的大小。在实际应用中,由于网络设备和操作系统的限制,UDP数据包的大小通常会受到一些限制。例如,某些路由器和防火墙可能会限制UDP数据包的最大长度,而一些操作系统也可能会对UDP数据包进行一些限制。

在使用UDP进行数据传输时,需要注意数据包的大小限制,尽量避免发送过大的数据包。可以使用getsockopt()方法查询系统对UDP数据包大小的限制,例如:

python">import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
max_size = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
print(f"Max size of UDP packet: {max_size} bytes")

2. TCP

TCP是一种可靠的、面向连接的传输协议,提供了数据传输的可靠性和完整性保障,但是传输效率相对较低。

下面是一个简单的TCP服务端和客户端示例代码:

TCP服务端:

python">import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

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

# 绑定IP地址和端口号
sock.bind((IP, PORT))

# 开始监听
sock.listen(1)

print(f"Server listening on {IP}:{PORT}...")

# 接受客户端连接
conn, addr = sock.accept()
print(f"Connected by {addr[0]}:{addr[1]}")

# 接收数据
data = conn.recv(1024)
print(f"Received data: {data.decode()}")

# 发送数据
msg = b"Hello, Client!"
conn.sendall(msg)

# 关闭连接
conn.close()

TCP客户端:

python">import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

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

# 连接服务器
sock.connect((IP, PORT))

# 发送数据
msg = b"Hello, Server!"
sock.sendall(msg)

# 接收数据
data = sock.recv(1024)
print(f"Received data: {data.decode()}")

# 关闭连接
sock.close()

需要注意的是,在TCP通信中,数据的传输需要通过连接来进行,因此需要先建立连接,然后进行数据传输,最后再关闭连接。由于TCP是面向连接的传输协议,因此需要进行三次握手等复杂的连接建立过程,相比于UDP效率较低,但是可靠性更高。


http://www.niftyadmin.cn/n/170008.html

相关文章

工作记录-卡尺工具

this.Invoke(new Action(()> { button1.Text "测试"; })); 卡尺垂直于边的长度,卡尺的宽度,卡尺的个数,保留的卡尺个数,边缘最低对比度等。 黑到白_____ positive 白到黑_____ negative * …

什么是队列,如何实现?

欢迎来到 Claffic 的博客 💞💞💞 “海色温柔,波浪缓慢,似乎在静静期待着新的一天。” 前言: 上期我们讲了栈,它的特点是“后入先出”。这次我们再来学习一个新的数据结构:队列&…

Unreal Engine 网络系统(三):RPC同步

目录 RPC RPC执行分三种形式 修改所有权 RPC 全称Remote Procedure Call,远端调用。 指在本机上调用函数,但在其他机器上远程执行的函数。 RPC函数可以允许Client或Server通过网络连接相互发送消息。RPC即行为同步,主要作用是将调用和执…

MySQL查看正在运行的SQL

MySQL查看正在运行的SQL 前言 ​ 在安装MySQL的时候会默认初始化几个MySQL运行所需的数据库:mysql, sys, information_schema, performance_schema.这几个库存储了MySQL在运行过程中的配置信息,运行信息,参数配置,数据库信息&…

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时,为解调(输入);否则为调…

C. BA-String(字符串转换为K进制位)

Problem - C - Codeforces 给你一个整数k和一个字符串s,它只包含字符a(一个小写拉丁字母)和*(一个星号)。每个星号应替换为几个小写拉丁字母“b”(从O到k包括在内)。不同的星号可以替换为不同数量的字母“b”。替换的结果称为BA-string。两个字符串a和b是不同的&…

一、简单了解ElasticSearch

目录一、ElasticSearch简介1.ES与关系型数据库对比2.什么是全文检索3.分词原理(基于倒排索引)二、核心概念1.索引index2.映射mapping3.字段filed4.字段类型type5.文档document6.集群cluster7.节点node8.分片9.副本三、搭建es单机版、集群版1.搭建es2.集成…

web前端-微信小程序开发学习

web前端-微信小程序开发学习1. 小程序的概述2. 小程序的项目结构2.1 小程序项目结构分析2.2 WXML模版2.3 小程序的宿主环境3. 组件3.1 视图容器类组件3.2 常用的基础内容组件3.3 其它组件4. 小程序模版与配置4.1 数据绑定4.2 事件绑定4.2.1 bindtap4.2.2 bindinput4.3 条件渲染…