python使用tcp传输图片数据
作者:zebra_zzh 发布时间:2023-08-09 06:33:48
标签:python,tcp,传输数据
本文实例为大家分享了python使用tcp传输图片数据的具体代码,供大家参考,具体内容如下
数据包格式如下
客户端:
import socket
import sys
HOST,PORT = "172.18.0.3",19984
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
#包头标志
arrBuf = bytearray(b'\xff\xaa\xff\xaa')
#以二进制方式读取图片
picData = open('1.jpg', '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
sock.sendall(arrBuf)
sock.close()
if __name__ == '__main__':
main()
服务端:
import socketserver
import os
import sys
import time
import threading
ip_port=("172.18.0.3",19984)
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("len is ", allLen)
curSize = 0
allData = b''
while curSize < allLen:
data = self.request.recv(1024)
allData += data
curSize += len(data)
print("recv data len is ", 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("-------------request guid is ", strGuid)
imgData = allData[64:]
strImgFile = "2.jpg"
print("img file name is ", 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://blog.csdn.net/qq_24282081/article/details/106498871
0
投稿
猜你喜欢
- 首先添加一个splice函数:splice:该方法的作用就是从数组中删除一个元素array.splice(index,count,value
- python中format的使用format函数这是一种字符串格式化的方法,用法如str.format()。基本语法是通过 {} 和 : 来
- 从PHP生成HTML静态页面并存储到以年份和月份为名称创建的目录。读取全部数据批量生成,全部生成后弹出提示。可指定批次生成数量,建议不超过8
- 一、闭包闭包相当于函数中,嵌套另一个函数,并返回。代码如下:def func(name): # 定义外层函数 def inner
- 今天在玩 google earth 4.0b,发现 Print Screen 下来的图片很大,如果直接放在网页上,因为尺寸太大又不合适,又不
- scrapy框架只能爬取静态网站。如需爬取 * 站,需要结合着selenium进行js的渲染,才能获取到动态加载的数据。如何通过seleni
- Google Chrome,又喜欢逛豆瓣,Google Chrome支持User Scripts了,但是我写的那几个插件在Chrome下又跑
- 一、概论超大型系统的特点为:1、处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB;2、系统必须提供实时响应功能,系统
- 前言一般的反爬措施是在多次请求之间增加随机的间隔时间,即设置一定的延时。但如果请求后存在缓存,就可以省略设置延迟,这样一定程度地缩短了爬虫程
- 代码如下:using System; using System.Data; using System.Configuration
- 本文实例讲述了kNN算法python实现和简单数字识别的方法。分享给大家供大家参考。具体如下:kNN算法算法优缺点:优点:精度高、对异常值不
- 一、什么是函数装饰器1.函数装饰器是Python提供的一种增强函数功能的标记函数;2.装饰器是可调用的函数对象,其参数是另一个函数(被装饰的
- 之前都是直接拿sax,或dom等库去解析xml文件为Python的数据类型再去操作,比较繁琐,如今在写Django网站ajax操作时json
- 在获得SA密码后,往往因为服务器管理者或”前人”将net.exe和net1.exe被限制使用,无法添
- sql server的备份与恢复(查询分析器) 查询分析器: 命令: 1:备份数据库命令: backup database whdb1(要备
- 一、什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体
- 前言:要说小时候称霸所有翻盖手机的小游戏,除了贪吃蛇,那就是推箱子了。控制小人将所有箱子放到指定位置,就是这样简简单单的操作,陪伴我度过了无
- 完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看 <% '-------------------
- 本文实例讲述了python实现string和dict的相互转换方法。分享给大家供大家参考,具体如下:字典(dict)转为字符串(string
- PyQt5动态(可拖动控件大小)布局控件QSplitter简介PyQt还提供了特殊的布局管理器QSplitter。它可以动态地拖动子控件之间