使用Python发送文件和文件名
我想制作一个简单的服务器,从客户端接收不同类型的文件。问题是,我无法从客户端获得发送过来的文件名,因此所有文件都保存为1个文件名,无论文件名是什么 这是我的客户。py:使用Python发送文件和文件名,python,sockets,Python,Sockets,我想制作一个简单的服务器,从客户端接收不同类型的文件。问题是,我无法从客户端获得发送过来的文件名,因此所有文件都保存为1个文件名,无论文件名是什么 这是我的客户。py: import socket with socket.socket() as s: s.connect(('192.168.1.2',10000)) with open('Image.jpg','rb') as f: s.sendall(f.read()) 这是我的server.py: impor
import socket
with socket.socket() as s:
s.connect(('192.168.1.2',10000))
with open('Image.jpg','rb') as f:
s.sendall(f.read())
这是我的server.py:
import socket
print("Server started")
while True:
with socket.socket() as s:
s.bind(('192.168.1.2',10000))
s.listen(1)
with s.accept()[0] as c:
chunks = []
while True:
chunk = c.recv(4096)
if not chunk: break
chunks.append(chunk)
print("Receiving file")
with open('Image.jpg','wb') as f:
f.write(b''.join(chunks))
print("File Received")
这很好用。问题开始了,如果我发送另一个文件,例如“data.csv”,它仍然会在服务器上保存为“Image.jpg”
是否有办法将文件名与文件一起保存?我通常会在数据之前发送文件名:
import socket
print("Server started")
while True:
with socket.socket() as s:
s.bind(('192.168.1.2',10000))
s.listen(1)
with s.accept()[0] as c:
chunks = []
while True:
filename = c.recv(1600)
filename = filename.decode()
chunk = c.recv(4096)
if not chunk: break
chunks.append(chunk)
print("Receiving file")
with open(filename,'wb') as f:
f.write(b''.join(chunks))
print("File Received")
客户:
import socket
import time
with socket.socket() as s:
s.connect(('192.168.1.2',10000))
with open('Image.jpg','rb') as f:
s.sendall('Image.jpg'.encode())
time.sleep(3)
s.sendall(f.read())
也许您可以将其作为标题或图片前的消息?现在以明文发送文件不是一个好主意,您是否考虑过使用
scp
?您需要创建一个有线协议,允许您包含文件名(或使用一个已经可以这样做的协议,例如ftp…)