python使用tcp傳輸圖片數(shù)據(jù)
本文實例為大家分享了python使用tcp傳輸圖片數(shù)據(jù)的具體代碼,供大家參考,具體內(nèi)容如下
數(shù)據(jù)包格式如下

客戶端:
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)
#數(shù)據(jù)體長度 = guid大小(固定) + 圖片大小
datalen = 64 + picSize
#組合數(shù)據(jù)包
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()
服務(wù)端:
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))
#接收到的數(shù)據(jù),前64字節(jié)是guid,后面的是圖片數(shù)據(jù)
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)
#將圖片數(shù)據(jù)保存到本地文件
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()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python使用socket高效傳輸視頻數(shù)據(jù)幀(連續(xù)發(fā)送圖片)
- python 中Arduino串口傳輸數(shù)據(jù)到電腦并保存至excel表格
- 對python中基于tcp協(xié)議的通信(數(shù)據(jù)傳輸)實例講解
- 在python環(huán)境下運用kafka對數(shù)據(jù)進行實時傳輸?shù)姆椒?/a>
- 使用python實現(xiàn)http及ftp服務(wù)進行數(shù)據(jù)傳輸?shù)姆椒?/a>
- Python爬蟲抓取手機APP的傳輸數(shù)據(jù)
- python網(wǎng)絡(luò)編程之?dāng)?shù)據(jù)傳輸UDP實例分析
- python實現(xiàn)udp數(shù)據(jù)報傳輸?shù)姆椒?/a>
- Python數(shù)據(jù)傳輸黏包問題
相關(guān)文章
使用Streamlit和Pandas實現(xiàn)帶有可點擊鏈接的數(shù)據(jù)表格
這篇文章主要為大家詳細介紹了如何利用?Streamlit?和?Pandas?在?Python?中創(chuàng)建一個帶有可點擊鏈接的數(shù)據(jù)表格,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
使用python Telnet遠程登錄執(zhí)行程序的方法
今天小編就為大家分享一篇使用python Telnet遠程登錄執(zhí)行程序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題
這篇文章主要介紹了解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python中將函數(shù)賦值給變量時需要注意的一些問題
變量賦值是我們在日常開發(fā)中經(jīng)常會遇到的一個問題,下面這篇文章主要給大家介紹了關(guān)于python中將函數(shù)賦值給變量時需要注意的一些問題,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-08-08
在pytorch中如何查看模型model參數(shù)parameters
這篇文章主要介紹了在pytorch中如何查看模型model參數(shù)parameters,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
windows10 pycharm下安裝pyltp庫和加載模型實現(xiàn)語義角色標注的示例代碼
這篇文章主要介紹了windows10 pycharm下安裝pyltp庫和加載模型實現(xiàn)語義角色標注,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05

