我之前用過socket跨語言跨平臺通信,不過那時傳的字節都比較小,等我想傳輸圖片時問題出現了,傳輸時報錯,網上查了查,是傳輸數據過大導致的,於是客戶端獲取對應文件的size,並把它分段傳輸,服務端拿到分段的數據並把它重新合併成你想要的文件
廢話不多說,直接放代碼
客戶端:
# -*- coding: UTF-8 -*-
import socket, os, struct
import time
import cv2
"""set ip address"""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.200.243', 50005))
pre_name = os.path.dirname(os.path.realpath(__file__))
while True:
filepath = pre_name+'/0.jpg'
image = cv2.imread(filepath)
gray = cv2.cvtColor( image, cv2.COLOR_BGR2GRAY )
if os.path.isfile(filepath):
fileinfo_size = struct.calcsize('128sl') # 定義打包規則
# 定義文件頭信息,包含文件名和文件大小
fhead = struct.pack('128sl', bytes(os.path.basename(filepath).encode('utf-8')),os.stat(filepath).st_size)
print(fhead)
s.send(fhead)
print('client filepath: ', os.path.basename(filepath), os.stat(filepath).st_size)
fo = open(filepath, 'rb')
while