Python-Socket编程实现tcp-udp通信

本文章是记录我准备大创项目时学的socket编程的用法,纯属记录生活,没有教学意义,视频我是看b站up主王铭东学的,讲的很详细,我只粗略学了个大概,我想要通过tcp,udp传输yolo目标检测中的物体坐标信息给单片机,然后小车实现追踪(只是初步想法),有更好的办法的话,欢迎讨论~

UDP传输视频客户端:

import socket
import cv2# 服务器地址和端口
SERVER_IP = '192.168.0.101'
SERVER_PORT = 7890# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 打开摄像头
cap = cv2.VideoCapture(0)# 检查摄像头是否成功打开
if not cap.isOpened():print("Error: Failed to open camera.")exit()# 设置数据包大小
PACKET_SIZE = 65507while True:# 从摄像头读取一帧视频ret, frame = cap.read()# 检查是否成功读取到帧if not ret:print("Error: Failed to read frame from camera.")break# 编码视频帧数据_, frame_data = cv2.imencode('.jpg', frame)frame_data = frame_data.tobytes()# 分割帧数据并发送给服务器total_size = len(frame_data)num_packets = total_size // PACKET_SIZE + 1for i in range(num_packets):start = i * PACKET_SIZEend = min((i + 1) * PACKET_SIZE, total_size)client_socket.sendto(frame_data[start:end], (SERVER_IP, SERVER_PORT))# 显示帧cv2.imshow('Client', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 关闭摄像头、窗口和套接字
cap.release()
cv2.destroyAllWindows()
client_socket.close()

UDP服务端:

import socket
import cv2
import numpy as np
# 服务器地址和端口
SERVER_IP = '192.168.0.101'
SERVER_PORT = 7890# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind((SERVER_IP, SERVER_PORT))# 设置数据包大小
PACKET_SIZE = 65507while True:# 接收来自客户端的帧数据frame_data, _ = server_socket.recvfrom(PACKET_SIZE)# 检查接收到的帧数据是否为空if not frame_data:print("Error: Received empty frame data.")continue# 解码帧数据nparr = np.frombuffer(frame_data, np.uint8)frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)# 检查解码是否成功if frame is None:print("Error: Failed to decode frame.")continue# 显示帧cv2.imshow('Server', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 关闭窗口和套接字
cv2.destroyAllWindows()
server_socket.close()

如果要用的话也很容易,最起码得安装opencv和socket相关包,然后查看服务端的ip地址,插上摄像头,就可以开始传输视频了。效果如图所受:

                                                            如果有问题,欢迎交流

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

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

相关文章

C语言中的goto语句

goto label; C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 #include <stdio.h> int main(){goto first;printf("我是你好\n");first:printf("nihao\n");second:printf("This is 2\n");return 0; } 使用goto会…

== 和 equals()区别,equals()重写问题

对于引用类型&#xff1a;比较的是两个引用是否相同&#xff08;所指的是否为同一个对象&#xff09;&#xff0c;注&#xff1a;如果两个引用所指的对象内容一样&#xff0c;但是不是同一个对象&#xff08;hashcode不一样&#xff09;&#xff0c;依然返回false&#xff0c;随…

MYSQL数据目录结构上篇-表在文件系统中表示

前言感悟:我个人是比较不喜欢只会用,不太懂为什么的这么用,而且有的时候很多官方术 语让人难以读懂, 这里我会用比较大白话的方式,让我自己也能让网友们更加理解,如果书写哪里有误,欢迎大家指出((,,•ω•)ノ"(っω•&#xff40;。)) 从入门开始啦推荐一个学习mysql的视频…

在GPU上加速RWKV6模型的Linear Attention计算

精简版&#xff1a;经过一些profile发现flash-linear-attention中的rwkv6 linear attention算子的表现比RWKV-CUDA中的实现性能还要更好&#xff0c;然后也看到了继续优化triton版本kernel的线索。接着还分析了一下rwkv6 cuda kernel的几次开发迭代以此说明对于不懂cuda以及平时…

c++ 读取输入加速

c 在处理大规模输入输出时cin会很慢&#xff0c; 可能需要使用scanf 代码 这时候就需要使用下面的函数来加速cin 的输入 代码 static const auto io_sync_off[](){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return nullptr; }();使用例子 static con…

基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的房屋租赁管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

【机器学习】Ctrl-Adapter:视频生成领域的革新者

Ctrl-Adapter&#xff1a;视频生成领域的革新者 一、ControlNets的挑战与Ctrl-Adapter的应运而生二、Ctrl-Adapter的技术原理与实现三、Ctrl-Adapter的应用实例与性能表现四、Ctrl-Adapter的意义与未来展望 随着人工智能技术的飞速发展&#xff0c;图像与视频生成领域正经历着前…

【busybox记录】【shell指令】cksum

目录 内容来源&#xff1a; 【GUN】【cksum】指令介绍 【busybox】【cksum】指令介绍 【linux】【cksum】指令介绍 使用示例&#xff1a; 计算校验和 - 传统输出格式 默认输出 - 基础POSIX标准32位CRC校验和 其他校验指令对参数有更好的支持&#xff0c;请看其他校验指…

一篇文章带你深入了解“指针”

一篇文章带你深入了解“指针” 内存和地址了解指针指针类型const修饰指针指针的运算指针与整数之间的运算指针与指针之间的运算指针的关系运算 void* 指针传值调用和传址调用数组和指针的关系野指针野指针的形成原因规避野指针 二级指针字符指针指针数组数组指针数组传参一维数…

灌溉机器人 状压dp

灌溉机器人 题目描述 农田灌溉是一项十分费体力的农活&#xff0c;特别是大型的农田。小明想为农民伯伯们减轻农作负担&#xff0c;最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下&#xff0c;给农田里的作物进行灌溉。 现在有一片 N 行 M 列的农田。农田的土…

Java Jackson-jr 库是干什么用的

Jackson-jr 是一个轻量级的Java JSON 处理库。这个库被设计用来替代 Jackson 的复杂性。对比 Jackson 的复杂 API&#xff0c;Jackson-jr 的启动速度更快&#xff0c;包大小更小。 虽然Jackson databind&#xff08;如ObjectMapper&#xff09;是通用数据绑定的良好选择&#…

三维重建(SFM)与实时定位建图(SLAM)的区分与联系

1、SLAM SLAM是Simultaneous Location and Mapping&#xff0c;同时定位与地图构建。是指搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己的运动。目的是解决自主机器人“定位”和“建图”两个问题…

AI学习指南-学习AI需要的编程基础

亲爱的AI初学者们&#xff0c;欢迎来到人工智能的奇妙世界&#xff01;&#x1f680; 在这篇博客中&#xff0c;我将带你了解学习人工智能所需的编程基础。不用担心&#xff0c;我会尽量用简单易懂的方式来解释&#xff0c;让你即使是编程新手也能轻松上手&#xff01; 1. Pyt…

OpenCV多张图片堆叠显示

OpenCV实现多张图片堆叠显示 程序思路效果代码 程序思路 读取两张或多张图片&#xff1b;获取图片尺寸&#xff1b;选择多张图片中较大的宽度和高度建立画布&#xff1b;合并图片到画布&#xff1b; 效果 代码 import cv2 import numpy as np# 读取两张图片 img1 cv2.imrea…

计算机网络中常用的网络协议

计算机网络中的网络协议可以按照其功能和作用的不同分为多种类型&#xff0c;常见的网络协议包括 传输层协议&#xff1a; TCP (Transmission Control Protocol)&#xff1a;传输控制协议&#xff0c;提供可靠的数据传输服务&#xff0c;保证数据的完整性和顺序性。UDP (User D…

C# Web控件与数据感应之 TreeView 类

目录 关于 TreeView 一些区别 准备数据源 范例运行环境 一些实用方法 获取数据进行呈现 ​根据ID设置节点 获取所有结点的索引 小结 关于 TreeView 数据感应也即数据捆绑&#xff0c;是一种动态的&#xff0c;Web控件与数据源之间的交互&#xff0c;本文将继续介绍与…

mysql设置允许其他IP访问

文章目录 更改mysql配置文件登录mysql 更改mysql配置文件 查找.ini或者.cnf文件 更改bind-address为0.0.0.0 [mysqld] character-set-serverutf8mb4 bind-address0.0.0.0 default-storage-engineINNODB [mysql] default-character-setutf8mb4 [client] default-character-s…

服务器并发编程--libevent

文章目录 一、Libevent概述1.两个重要的结构体2.libevent常用接口 二、libevent IO事件三、libevent信号事件四、libevent高并发服务器参考 一、Libevent概述 Libevent 是一个用C语言编写的、轻量级的开源高性能网络库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&…

redis集群-主从机连接过程

首先从机需要发送自身携带的replid和offset向主机请求连接 replid&#xff1a;replid是所有主机在启动时会生成的一个固定标识&#xff0c;它表示当前复制流的id&#xff0c;当从机第一次请求连接时&#xff0c;主机会将自己的replid发送给从机&#xff0c;从机在接下来的请求…

LAME及 iOS 编译

文章目录 关于 LAME编译 for iOS 关于 LAME 官网&#xff1a;https://lame.sourceforge.io LAME是根据LGPL许可的高质量MPEG音频层III&#xff08;MP3&#xff09;编码器。 LAME的开发始于1998年年中左右。Mike Cheng 最开始将它作为针对8hz-MP3编码器源的补丁。在其他人提出…