关键的思路是:
1、先要对包的信息(这里是文件名和大小)使用struct模块将其转化为二进制串发送给接收方
2、接收方d根据包信息进行接收
接收端:
import socket,struct
host = '0.0.0.0'
port = 3000
fmt = '128si' #文件名最长128 i表示文件大小 i的数据类型决定了最大能够传输多大的文件
recv_buffer = 4096
listenSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listenSock.bind((host, port))
while True:
listenSock.listen(5)
conn, addr = listenSock.accept()
headsize = struct.calcsize(fmt)
head = conn.recv(headsize)
filename = struct.unpack(fmt, head)[0].decode().rstrip('\0') #要删掉用来补齐128个字节的空字符
filename = '/tmp/'+filename
filesize = struct.unpack(fmt, head)[1]
print("filename:" + filename + "\nfilesize:" + str(filesize))
recved_size = 0
fd = open(filename, 'wb')
count = 0
while True:
data = conn.recv(recv_buffe