#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import socket
def send_file0(sock, filepath): # ファイル内容が全部メモリ記憶可能なサイズでのみ有効
filesize = os.path.getsize(filepath)
filename = os.path.basename(filepath)
s = "f{} {}".format(filename, filesize)
bin=(s+"\r\n").encode("utf-8")#binaryへ変換
print(bin, end=" ")
sock.sendall(bin) #filename filesize 送信
with open(filepath, "rb") as f:
bin = f.read(filesize)
# print("送信data:" , bin )
sock.sendall(bin) # ファイル内容一括送信
print("送信byte:" , len(bin) )
def send_file(sock, filepath):# filepathのファイルをクライアントに送信(大きなフィルにも対応)
try:
filename = os.path.basename(filepath)
file_info = os.stat(filepath)
filesize = file_info[6]
s = "f{} {}".format(filename, filesize)
bin=(s+"\r\n").encode("utf-8")
print(s) # 名前とサイズの送信文字列
sock.sendall(bin) # send filename filesize
CHUNK = 100000 # この数ずつ送る(必要に応じて変更)
remaining_sizes=filesize
with open(filepath, "rb") as f:
while True:
print(f"Remaining sizes:{remaining_sizes}")
size=CHUNK if remaining_sizes >= CHUNK else remaining_sizes
data = f.read(size)
sock.sendall(data)
remaining_sizes -=len(data)
if remaining_sizes == 0: break
#
#
print(f"send_file:{filepath} end." )
except Exception as e:
print("send_file Error:"+ str(e))
# ----- メイン ---dirpath のディレクトリ内のfilesに記憶されるファイルを送信------------------------------
dirpath='.\\datas\\'
server_addr =("192.168.0.110", 59154) # 接続先をコードで指定する
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_addr)
files='''
app_pwm_esp32.umh
uBeep.umh
'''
for file in files.split("\n"):
if file.strip() == "": continue
filepath=dirpath+file
send_file(sock, filepath)
sock.close()