基于Python socket利用TCP协议让上下位机 传输图片

2023-05-16

基于Python socket利用TCP协议让上下位机 传输图片

          • Notes
    • 1. 原理
    • 2. 下位机代码:
    • 3. 上位机代码:

Notes

之前用来做 基于QT 的物联网图形化软件的其中一个功能,因为在这遇到过许多坑所以分享一下我的解决方案,比如图片传输只传输了一部分。。各种丢数据。。最后终于实现了一个有效的方法。


1. 原理

  1. 在接受图片数据帧前 先让下位机发送一个 图片数据帧的字长。然后在以此为循环出口,不断把接收过来的图片数据帧加起来,最后得到图片的数据帧。



2. 下位机代码:


# 服务端的IP地址 + 建立TCP客户端
Server_Host = '192.168.1.1'
ListenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ListenSocket.connect((Server_Host, 1919))

def send_msg(self):
    """发送身份信息到上位机"""
    # 图片数据帧的长度
    encode_len = str(len(self.pic_data)).encode()
    print(len(encode_len))

    # 发送图片数据帧的长度
    ListenSocket.send(encode_len)
    time.sleep(1)
    # 发送图片数据帧
    ListenSocket.send(self.pic_data)

	# 下面是用来防差错测试的(可以不写)
	# 验证发送的图片 是否正确
    nparr = np.fromstring(self.pic_data, dtype='uint8')
    img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    print(img_decode)
    cv2.imshow("img_decode", img_decode)  # 显示图片
    cv2.waitKey(0)



3. 上位机代码:

# TCP服务端
Server_Host = '192.168.137.1'  # 填写上位机的 IP地址
Client_Host = '192.168.137.47'  # 填写下位机的 IP地址

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpServer.bind((Server_Host, 1919))
tcpServer.listen(10)

img_decode = None

class recvTCP_thread():
	def my_recv(self, sock, count):
		"""利用接收的图片长度把图片数据帧加起来"""
        data = b''
        while count:
            recvData = sock.recv(count)
            if not recvData:
                return None
            data += recvData
            count -= len(recvData)
        return data
	
	def recv_img(self):
		"""主函数"""
	    client, address = tcpServer.accept()
	    while True:
			# 接收二进制图片数据帧长度
	        tempdata_len = client.recv(1024).decode()
	        print(int(tempdata_len))
			# 使用my_recv函数来 接收二进制图片数据帧
	        data = self.my_recv(client, int(tempdata_len))
			# 把二进制图片转换格式
	        nparr = np.fromstring(data, dtype='uint8')
	        img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
	        break
	        
		# 显示图片
	    cv2.imshow("img_decode", img)  # 显示图片
	    cv2.waitKey(0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Python socket利用TCP协议让上下位机 传输图片 的相关文章

  • 树莓派新手入门教程

    原文 xff1a http www ruanyifeng com blog 2017 06 raspberry pi tutorial html 作者 xff1a 阮一峰 日期 xff1a 2017年6月15日 树莓派 xff08 Rasp
  • 数据结构实训之学生信息管理系统

    Copyright c 2016 烟台大学计算机与控制工程学院 All rights reserved 文件名称 xff1a 项目1 cpp 作 者 xff1a 泮春宇 完成日期 xff1a 2016年1月1日 版 本 号 xff1a v1
  • echart图表之highcharts

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 HighCharts是什么 xff1f 二 使用步骤1 引入库2 前端代码3 展现结果4 后台自动截图 总结 前言 提示
  • web登陆退出测试点总结

    根据自己的测试经历 xff0c 又阅读了一些关于登陆测试的资料 xff0c 对web 登陆退出测试点做了一下总结 xff1a 界面测试 xff1a 1 登陆页面显示是否正常 xff1a 文字和图片能否正常显示 xff0c 相应的提示信息是否
  • 异常值检测算法

    闲话 xff1a 最近总是特别嗜睡 xff0c 不知为何床对我的引力总是让我死死的赖在上面 xff0c 大概是懒癌又犯了 要改 异常值分析是检验数据是否有录入错误以及含有不合常理的数据的过程 xff0c 忽视异常值的存在是十分危险的 xff
  • informer

    list watch机制 list watch有两部分组成 xff0c 分别是list和watch list非常好理解 xff0c 就是调用资源的list API罗列资源 xff0c 基于HTTP短链接实现 xff1b watch则是调用资
  • kubelet - container manager

    containerManager 负责 node 节点上运行的容器的配置信息 xff0c 如 cgroup cpu device xff1b pod的创建流程参考 xff1a http www tianfeiyu com p 61 2825
  • 理解TCP/IP网络通信原理

    为什么会有TCP IP协议 在世界上各地 xff0c 各种各样的电脑运行着各自不同的操作系统为大家服务 xff0c 这些电脑在表达同一种信息的时候所使用的方法是千差万别 就好像圣经中上帝打乱了各地人的口音 xff0c 让他们无法合作一样 计
  • 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    8月15日 xff0c 百度2道面试题 xff1a 1 来自 编程之美 的概率题 xff1a 一个桶里面有白球 黑球各100个 xff0c 现在按下述规则取球 xff1a 的 i 每次从通里面拿出来两个球 xff1b ii 如果取出的是两个
  • virsh的使用与实例步骤安装虚拟机

    Libvirt 有两种控制方式 xff0c 命令行和图形界面 图形界面 xff1a 通过执行名 virt manager xff0c 启动 libvirt 的图形界面 xff0c 在图形界面下可以一步一步的创建虚拟机 xff0c 管理虚拟机
  • Jboss低版本项目热部署到Jboss7

    Jboss低版本项目热部署到Jboss7 1 Jboss7 新特性 1 1 构建在 Modular Service Container上 xff0c 充分地利用了多核处理器的能力 xff0c 并发 按需启动服务 xff0c 启动速度更快 占
  • devstack安装openstack

    devstack是一套用来给开发人员快速部署Openstack开发环境的脚本 xff0c 其实对于整个安装过程没有什么好说的 xff0c 因为脚本写的很完善 xff0c 全程无脑式安装也没什么大问题 xff0c 但是因为公司里的网络环境不给
  • RBAC vs ABAC

    K8s在1 3版本中发布了alpha版的基于角色的访问控制 xff08 Role based Access Control xff0c RBAC xff09 的授权模式 相对于基于属性的访问控制 xff08 Attribute based
  • Attach detach controller manager 流程

    一 xff1a 初始化 1 adc 调用 InitPlugins 初始化 volumeplugins 1 1 初始化 dynamicplugins Currentlyonly Flexvolume plugins are dynamical
  • 网络时延的几个概念

    假设一个数据包X从路由器A到路由器B xff0c 我们来分析下 xff0c 在这种情况下 xff0c 数据包X从A到B的总时延 xff1a 当A接收到数据包时 xff0c 会检测数据包的首部 xff0c 决定将该数据包导向哪一个链路上 xf
  • 洗牌、发牌算法 (打乱扑克牌顺序)

    img alt src https img blog csdn net 20130504122806254 include lt stdio h gt include lt stdlib h gt include lt time h gt
  • X11,GTK,QT,GNOME的区别与联系(UI工具总结)

    1 X11是X Window System Protocol Version 11 xff08 RFC1013 xff09 xff0c 是X server和X client之间的通信协议 X server是xfree86 xorg驱动下的显
  • Metrics-server

    概述 从 v1 8 开始 xff0c 资源使用情况的监控可以通过 Metrics API的形式获取 xff0c 具体的组件为Metrics Server xff0c 用来替换之前的heapster xff0c heapster从1 11开始
  • 【推荐】真正的安卓网络摄像机(Android IPCamera)任意浏览器输入IP地址即可观看视频

    笔者打算寻找一款好用的安卓IPCamera xff0c 发现很多软件都需要安装特殊的监控端软件或者VLC播放器来接收RSTP视频流 xff0c 根本没法直接在浏览器中直接观看视频 多方寻找无果 xff0c 笔者遂决定自己开发一款IPCame
  • Xubuntu15.04更新系统源时出现错误提示W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease: 由于没有公钥,无法验证

    在更新系统源后 xff0c 输入sudo apt get update之后出现提示 xff1a W GPG 错误 xff1a http archive ubuntukylin com 10006 xenial InRelease 由于没有公

随机推荐