python用socket传输图片

这篇具有很好参考价值的文章主要介绍了python用socket传输图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本来想一次连接发送多张图片,但由于处理间隔的逻辑容易导致图片丢失等问题,所以这里采用的是每次连接只发送一张图片

发送的形式是base64编码,可以有效的适用于各种项目

客户端

import time
import cv2
import os
import base64
from socket import *


class Client:
    def __init__(self, host="127.0.0.1", port=8001):
        self.host = host
        self.port = port
        self.socket = self.connect()

    def connect(self):
        tcp_socket = socket()
        tcp_socket.connect((self.host, self.port))
        return tcp_socket
    
    # 发送的是编码,有些项目中就不需要保存路径,直接发送编码了
    def base64_encode_img(self, img_data):
        _, image_encoded = cv2.imencode('.jpg', img_data)
        image_bytes = image_encoded.tobytes()
        image_base64 = base64.b64encode(image_bytes).decode('utf-8')
        return image_base64

    def get_img(self, img_path):
        img = cv2.imread(img_path)
        img_d = self.base64_encode_img(img)
        img_b = img_d.encode()
        return img_b

    def send_msg(self, msg):
        self.socket.send(msg.encode())

    def send_img(self, img_path):
        img_data = self.get_img(img_path)
        n = 0
        while True:
            self.socket.send(img_data[n:n + 1024])
            n += 1024
            if n > len(img_data):
                print(f"已发送:{img_path}")
                break

    def close(self):
        self.socket.close()


if __name__ == '__main__':

    path = "C:/Users/cheng/Desktop/Spider/dilireba"   # 图片路径
    # path = "C:/Users/cheng/Desktop/Spider/gulinazha"
    # path = "C:/Users/cheng/Desktop/Spider/boduo"
    pics = os.listdir(path)
    for pic in pics:
        C = Client(host="127.0.0.1", port=8001)
        p_p = path + "/" + pic
        C.send_img(p_p)  # 发送单张图片
        C.close()

服务端

服务器与连接分离处理,可以有效控制连接,避免单个连接影响服务运行文章来源地址https://www.toymoban.com/news/detail-825844.html

import os
from socket import *
import base64


# 图片解码
def base64_decode_img(base64_code):
    """
    :param base64_code: base64编码
    :return: 二进制据,直接写入保存为图片
    """
    img_bytes = base64.b64decode(base64_code)
    return img_bytes


class WebSocketServer:
    def __init__(self, host="127.0.0.1", port=8001):
        self.socket = socket()
        self.host = host
        self.port = port

    def bind(self):
        """监听套接字"""
        self.socket.bind((self.host, self.port))
        self.socket.listen()  # 设置监听套接字

    def bind_connection(self):
        """建立连接"""
        while True:
            print("等待连接....")
            conn, addr = self.socket.accept()  # 连接 conn是连接对象;addr=(host,port)
            print(f"连接到:{addr[0]}\t端口:{addr[1]}")
            return conn, addr

    def close(self):
        """ 关闭监听套接字"""
        self.socket.close()


class Connection:
    def __init__(self, conn, addr):
        self.conn = conn
        self.addr = addr
        self.save_path = "recv/"
        self.flag = False

    def close(self):
        """断开连接"""
        self.conn.close()
        print(f"{self.addr[0]}:{self.addr[1]}断开连接")

    def send_msg(self, message):
        """发送信息"""
        self.conn.send(message.encode())

    def receive_msg(self, bufsize=1024):
        """接受信息"""
        data_received = self.conn.recv(bufsize).decode()
        return data_received

    def handle(self, count):
        if not os.path.exists(self.save_path):
            os.makedirs(self.save_path)
        img_data = "" # 需要存储的图片数据
        while True:
            data = self.receive_msg()  # 持续获取该对象信息
            if data:
                img_data += data
            else:
                self.flag = True
                break
        d = base64_decode_img(img_data)
        with open(f"{self.save_path}/{count}.jpg", "wb") as f:
            f.write(d) if d else None


if __name__ == '__main__':
    webserver = WebSocketServer(host="127.0.0.1", port=8001)
    webserver.bind()
    count = 0
    while True:
        conn, addr = webserver.bind_connection()
        con = Connection(conn, addr)
        while True:
            con.handle(count)
            count += 1
            print(f"完成{count}")
            if con.flag: break

到了这里,关于python用socket传输图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 通过socket通讯实现实时摄像头视频传输

    话不多说,直接上代码: 这是服务端代码: 这是客户端代码:         通过客户端调用摄像头进行获取每一帧图象,再传输到服务端呈现实时视频。           这里为什么要设置图片的宽和高呢,主要是默认情况下,我这边显示出的图象内容会发生错误,具体为什么我

    2024年02月12日
    浏览(41)
  • 使用SOCKET搭建linux和window实现实时摄像头传输(linux传输win端使用C++mfc显示)--Win端开发

    配置: Window10 VS2013 opencv249 如果VS和opencv配置不一样,让版本对应 Opencv与VS版本 1.1 MFC项目搭建 通过这些步骤就创建了一个MFC基础项目。 1.2项目属性配置 本项目因为要使用opencv,所以就要配置以下opencv的环境 首先在opencv官网下载opencv,此次使用opencv2.4.9,下载完并且完成安装 接下

    2024年02月10日
    浏览(45)
  • python socket 通信(发送文字、图片、文件)

    互联网上每个计算机的唯一标识就是 IP 地址。IP 地址实际上是一个32位整数(称为IPv4),它是以字符串表示的 IP 地址,如:172.16.254.1,实际上是把32位整数按8位分组后得到的。如 图1.1.1所示:                                                                        

    2024年02月05日
    浏览(42)
  • 智能车上位机系统,pyqt下的socket通信,python实现服务器+客户端,文本+视频不定长字节传输,超详细,小白都能看懂

    目录 前言: 准备工作: 初级服务器端编写: 中级服务器端编写+客户端收数据函数实现: 数据包格式v1.0 客户端收数据函数V1.0 客户端分析1.0     本地测试:成功!      两台主机测试1.0:失败,视频解析失败,直接花屏了! 问题分析: 问题解决: 数据包格式V2.0 客户端接

    2024年04月17日
    浏览(44)
  • Python做批处理,给安卓设备安装应用和传输图片

    场景:几台新安卓平板过来了,需要安4个应用并复制4张图片。手工操作其实也未尝不可,但是能自动化起来,岂不是美哉。 python调用系统命令,我选用了os.system,最简单粗暴,也能有回显,就它了! 给安卓装应用自然离不开adb,这个需要提前准备好。 安装命令是adb instal

    2024年02月09日
    浏览(50)
  • Python物联网开发-Python_Socket通信开发-Python与Tcp协议物联网设备通信-Socket客户端

            Python在物联网开发中的重要愈来愈重,因此,掌握Python语言与物联网设备之间的通信就显得尤为重要,可以通过编写Python程序实现获取物联网设备的传感器数值并可以更改物联网设备上的执行器状态。         首先,当使用Python进行Socket通信时,需要导入Python的so

    2024年02月17日
    浏览(67)
  • 使用Socket技术进行数据传输、传输文件;浏览器访问Socket服务器

    利用通信线路和通信设备,将地理位置不同的、功能独立的多台计算机互连起来,以功能完善的网络软件来实现资源共享和信息传递,就构成了计算机网络系统 IP地址和端口 通过IP地址,区分不同的计算机 每一台电脑在一个网络上拥有一个独属于自己的IP地址,用于区别其他

    2024年02月07日
    浏览(52)
  • python 基于http方式与基于redis方式传输摄像头图片数据的实现和对比

    0. 需求 在不同进程或者不同语言间传递摄像头图片数据,比如从java实现的代码中获取摄像头画面数据,将其传递给python实现的算法代码中进行处理。这里,提供基于http方式和基于redis方式这两种方式进行实现,并比较两者传输速度。 作为样例,代码均采用python实现,运行环

    2024年02月09日
    浏览(40)
  • 【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

    Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ; 在 网络编程 中 , Socket 套接字 主要用于 客户端 与 服务器 之间的 通信 , 大部分 网络相关的应用程序 , 都使用到了 Socket 套接字技术 ; 套接字有两种类型 : 流套接字 : 提供了一个可

    2024年02月15日
    浏览(130)
  • 【socket】从计算机网络基础到socket编程——Windows && Linux C语言 + Python实现(TCP+UDP)

    简单讲一下基础知识,便于后面代码的理解,建议大概浏览一下这一小节内容。这里讲的只是冰山一角,建议大家学习计算机网络相关知识,推荐几本书: 《计算机网络》(谢希仁) 《计算机网络 自顶向下方法》 《计算机网络技术》 《计算机网络基础及应用》 《Linux C从入

    2024年02月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包