TCP 多张图片收发通信

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路TCP 多张图片收发通信,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Demo目录结构
在这里插入图片描述
client.py

#!/usr/bin/env python
# encoding: utf-8
'''
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: client.py
@time: 2022/1/26 16:57
@desc:
'''
import socket
import sys
import time

HOST, PORT = "192.168.0.115", 5001


def main():

    pic_opt_list = ['11.png','11.jpg']
    arrBuf_list = []
    # 以二进制方式读取图片
    for pic_opt in pic_opt_list:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((HOST, PORT))

        # 包头标志
        arrBuf = bytearray(b'\xff\xaa\xff\xaa')

        picData = open('Client/pic/'+pic_opt, 'rb')
        picBytes = picData.read()

        # 图片大小
        picSize = len(picBytes)


        # 数据体长度 = guid大小(固定) + 图片大小
        datalen = 64 + picSize

        # 组合数据包
        arrBuf += bytearray(datalen.to_bytes(4, byteorder='little'))
        guid = 23458283482894382928948
        arrBuf += bytearray(guid.to_bytes(64, byteorder='little'))
        arrBuf += picBytes
        arrBuf_list.append(arrBuf)
        sock.sendall(arrBuf)
    sock.close()



if __name__ == '__main__':
    main()

server.py

#!/usr/bin/env python
# encoding: utf-8
'''
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: server.py
@time: 2022/1/26 16:58
@desc:
'''
import random
import socketserver
import os
import sys
import time
import threading

ip_port = ("192.168.0.115", 5001)


class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        print("conn is :", self.request)  # conn
        print("addr is :", self.client_address)  # addr

        while True:
            try:
                self.str = self.request.recv(8)
                data = bytearray(self.str)
                headIndex = data.find(b'\xff\xaa\xff\xaa')
                print(headIndex)

                if headIndex == 0:
                    allLen = int.from_bytes(data[headIndex + 4:headIndex + 8], byteorder='little')
                    print("长度是 : ", allLen)

                    curSize = 0
                    allData = b''
                    while curSize < allLen:
                        data = self.request.recv(1024)
                        allData += data
                        curSize += len(data)

                    print("接受数据长度为:", len(allData))
                    # 接收到的数据,前64字节是guid,后面的是图片数据
                    arrGuid = allData[0:64]
                    # 去除guid末尾的0
                    tail = arrGuid.find(b'\x00')
                    arrGuid = arrGuid[0:tail]
                    strGuid = str(int.from_bytes(arrGuid, byteorder='little'))  # for test

                    print("-------------请求的 guid 是: ", strGuid)
                    imgData = allData[64:]
                    name_id = random.randint(1,100)
                    strImgFile = "Server/pic/"+str(name_id)+"_"+str(name_id+1)+".jpg"

                    print("图片保存地址是: ", strImgFile)

                    # 将图片数据保存到本地文件
                    with open(strImgFile, 'wb') as f:
                        f.write(imgData)
                        f.close()

                    break
            except Exception as e:
                print(e)
                break


if __name__ == "__main__":
    s = socketserver.ThreadingTCPServer(ip_port, MyServer)
    print("start listen")
    s.serve_forever()```

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156938.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!