python使用tcp傳輸圖片數(shù)據(jù)
本文實(shí)例為大家分享了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))
#包頭標(biāo)志
arrBuf = bytearray(b'\xff\xaa\xff\xaa')
#以二進(jìn)制方式讀取圖片
picData = open('1.jpg', 'rb')
picBytes = picData.read()
#圖片大小
picSize = len(picBytes)
#數(shù)據(jù)體長(zhǎng)度 = 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()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python使用socket高效傳輸視頻數(shù)據(jù)幀(連續(xù)發(fā)送圖片)
- python 中Arduino串口傳輸數(shù)據(jù)到電腦并保存至excel表格
- 對(duì)python中基于tcp協(xié)議的通信(數(shù)據(jù)傳輸)實(shí)例講解
- 在python環(huán)境下運(yùn)用kafka對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)傳輸?shù)姆椒?/a>
- 使用python實(shí)現(xiàn)http及ftp服務(wù)進(jìn)行數(shù)據(jù)傳輸?shù)姆椒?/a>
- Python爬蟲(chóng)抓取手機(jī)APP的傳輸數(shù)據(jù)
- python網(wǎng)絡(luò)編程之?dāng)?shù)據(jù)傳輸U(kuò)DP實(shí)例分析
- python實(shí)現(xiàn)udp數(shù)據(jù)報(bào)傳輸?shù)姆椒?/a>
- Python數(shù)據(jù)傳輸黏包問(wèn)題
相關(guān)文章
基于Python pyecharts實(shí)現(xiàn)多種圖例代碼解析
這篇文章主要介紹了基于Python pyecharts實(shí)現(xiàn)多種圖例代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Python 實(shí)現(xiàn)LeNet網(wǎng)絡(luò)模型的訓(xùn)練及預(yù)測(cè)
本文將為大家詳細(xì)講解如何使用CIFR10數(shù)據(jù)集訓(xùn)練模型以及用訓(xùn)練好的模型做預(yù)測(cè)。代碼具有一定價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2021-11-11
Python算法應(yīng)用實(shí)戰(zhàn)之棧詳解
棧是什么,你可以理解為一種先入后出的數(shù)據(jù)結(jié)構(gòu)(First In Last Out),一種操作受限的線性表。下面這篇文章主要給大家介紹了Python中棧的應(yīng)用實(shí)戰(zhàn),文中給出了多個(gè)實(shí)例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02
python 如何通過(guò)執(zhí)行腳本安裝庫(kù)或卸載庫(kù)
通過(guò)執(zhí)行Python腳本,用戶可以輕松地安裝或卸載所需的庫(kù),本文介紹了該過(guò)程的具體步驟,包括如何編寫(xiě)用于安裝或卸載庫(kù)的腳本,無(wú)論是需要添加新功能還是清理環(huán)境,通過(guò)這種方式,開(kāi)發(fā)者都能有效管理其工作環(huán)境中的庫(kù)2024-11-11
Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能完整實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能,結(jié)合完整實(shí)例形式分析了Python多線程、多用戶FTP服務(wù)器端與客戶端相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-08-08
Python中的異常處理:try?except?Exception?as?e解決辦法
這篇文章主要介紹了Python中的異常處理機(jī)制,包括try、except、finally語(yǔ)句的基本用法和高級(jí)用法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
python基礎(chǔ)教程項(xiàng)目二之畫(huà)幅好畫(huà)
這篇文章主要為大家詳細(xì)介紹了python基礎(chǔ)教程項(xiàng)目二之畫(huà)幅好畫(huà),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Django框架實(shí)現(xiàn)在線考試系統(tǒng)的示例代碼
這篇文章主要介紹了Django框架實(shí)現(xiàn)在線考試系統(tǒng)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

