客户端代码
import os # 导入操作系统模块,用于文件操作
import struct # 导入struct模块,用于处理字节和数据结构之间的转换
from socket import * # 导入socket模块,用于网络通信
from threading import Thread # 导入线程模块,用于多线程处理
def receive_image(sock):
fileinfo_size = struct.calcsize('128sq') # 计算接收文件名和文件大小的字节大小
buf = sock.recv(fileinfo_size) # 接收图片名
if buf:
filename, filesize = struct.unpack('128sq', buf) # 解析文件名和文件大小
fn = filename.decode().strip('\x00') # 将文件名解码并去掉空字符
new_filename = os.path.join('./', 'client_' + fn) # 在当前目录下构建新文件名
recvd_size = 0
with open(new_filename, 'wb') as fp: # 以二进制写模式打开文件
while recvd_size < filesize:
data = sock.recv(1024) # 接收数据
if not data:
break
fp.write(data) # 写入接收到的数据
recvd_size += len(data) # 统计已接收的数据大小
print('写入完成')
sock.close() # 关闭连接
def send_data():
while True:
msg = input