最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python用socket傳輸圖片的項目實踐

 更新時間:2024年02月22日 09:28:32   作者:Aix959  
使用python在網(wǎng)絡(luò)上傳送圖片數(shù)據(jù),需要以byte格式讀取圖片,這樣才可以通過socket傳輸,本文就來介紹了python用socket傳輸圖片的項目實踐,具有一定的參考價值,感興趣的可以了解一下

本來想一次連接發(fā)送多張圖片,但由于處理間隔的邏輯容易導(dǎo)致圖片丟失等問題,所以這里采用的是每次連接只發(fā)送一張圖片

發(fā)送的形式是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
    
    # 發(fā)送的是編碼,有些項目中就不需要保存路徑,直接發(fā)送編碼了
    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"已發(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)  # 發(fā)送單張圖片
        C.close()

服務(wù)端

服務(wù)器與連接分離處理,可以有效控制連接,避免單個連接影響服務(wù)運行

import os
from socket import *
import base64


# 圖片解碼
def base64_decode_img(base64_code):
    """
    :param base64_code: base64編碼
    :return: 二進制據(jù),直接寫入保存為圖片
    """
    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):
        """監(jiān)聽套接字"""
        self.socket.bind((self.host, self.port))
        self.socket.listen()  # 設(shè)置監(jiān)聽套接字

    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):
        """ 關(guān)閉監(jiān)聽套接字"""
        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):
        """發(fā)送信息"""
        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 = "" # 需要存儲的圖片數(shù)據(jù)
        while True:
            data = self.receive_msg()  # 持續(xù)獲取該對象信息
            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

到此這篇關(guān)于python用socket傳輸圖片的項目實踐的文章就介紹到這了,更多相關(guān)python socket傳輸圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • pytorch學(xué)習(xí)教程之自定義數(shù)據(jù)集

    pytorch學(xué)習(xí)教程之自定義數(shù)據(jù)集

    這篇文章主要給大家介紹了關(guān)于pytorch學(xué)習(xí)教程之自定義數(shù)據(jù)集的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 利用python中pymysql操作MySQL數(shù)據(jù)庫的新手指南

    利用python中pymysql操作MySQL數(shù)據(jù)庫的新手指南

    PyMySQL是在Python3.x版本中用于連接MySQL服務(wù)器的一個庫,Python2中是使用mysqldb,這篇文章主要給大家介紹了關(guān)于利用python中pymysql操作MySQL數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 對python中的 os.mkdir和os.mkdirs詳解

    對python中的 os.mkdir和os.mkdirs詳解

    今天小編就為大家分享一篇對python中的 os.mkdir和os.mkdirs詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python識別驗證碼的思路及解決方案

    python識別驗證碼的思路及解決方案

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python識別驗證碼的思路及解決方案,有需要的朋友們可以參考下。
    2020-09-09
  • python中Class(類)的超詳細說明

    python中Class(類)的超詳細說明

    這篇文章主要介紹了python中Class(類)的相關(guān)資料,Class類定義了具有相同屬性和方法的對象集合,對象是類的實例,類變量在整個實例化的對象中是公用的,而實例變量是每個對象獨有的,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-11-11
  • Python+OpenCV實戰(zhàn)之利用?K-Means?聚類進行色彩量化

    Python+OpenCV實戰(zhàn)之利用?K-Means?聚類進行色彩量化

    這篇文章主要介紹了如何利用?K-Means?聚類進行色彩量化,以減少圖像中顏色數(shù)量。文中的代碼具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以關(guān)注一下
    2021-12-12
  • Python實現(xiàn)獲取nginx服務(wù)器ip及流量統(tǒng)計信息功能示例

    Python實現(xiàn)獲取nginx服務(wù)器ip及流量統(tǒng)計信息功能示例

    這篇文章主要介紹了Python實現(xiàn)獲取nginx服務(wù)器ip及流量統(tǒng)計信息功能,涉及Python針對nginx服務(wù)器信息操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • python數(shù)據(jù)類型可變與不可變深入分析

    python數(shù)據(jù)類型可變與不可變深入分析

    這篇文章主要為大家介紹了python數(shù)據(jù)類型可變與不可變深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • python 上下文管理器使用方法小結(jié)

    python 上下文管理器使用方法小結(jié)

    本文介紹了Python中的上下文管理器,以及如何結(jié)合with語句來使用上下文管理器,并且總結(jié)了一下with 語句的執(zhí)行流程。在很多情況下,with語句可以簡化代碼,并增加代碼的健壯性。
    2017-10-10
  • 基于Python編寫一個根據(jù)姓名測性別的小程序

    基于Python編寫一個根據(jù)姓名測性別的小程序

    這篇文章主要為大家介紹了如何利用Python編寫一款根據(jù)中文名能猜測性別的一款界面化的小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-03-03

最新評論

板桥市| 长岭县| 菏泽市| 会泽县| 泰顺县| 阳东县| 东兰县| 夏河县| 福安市| 桓台县| 洱源县| 佛教| 安福县| 霞浦县| 新巴尔虎左旗| 东至县| 河池市| 宣汉县| 乌鲁木齐市| 漳平市| 巨野县| 扶余县| 乌兰县| 平安县| 淮阳县| 贺州市| 广河县| 达日县| 通山县| 自治县| 南雄市| 巴林左旗| 辰溪县| 梁平县| 榆林市| 修文县| 威信县| 南涧| 双辽市| 离岛区| 华宁县|