[英]Sending different files from Client to Server in Python
我正在尝试使用python将文件从客户端发送到服务器。 它正在发送,但是问题是我没有得到相同的文件名。 假设文件名是File1.txt。 将其发送到服务器时,将以file_.txt的形式接收 。 我为此编写的代码是:
客户代码
import socket, os, shutil
from stat import ST_SIZE
HOST=raw_input("Please enter IP-address : ")
PORT=int(raw_input("Please enter PORT Number : "))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
if s.recv(8)!='READY':
raw_input('Unable to connect \n\n Press any key to exit ...')
s.close()
exit()
path=raw_input("Please enter the complete PATH of your file : ")
f=open(path,'rb')
fsize=os.stat(f.name)[ST_SIZE]
s.sendall(str(fsize).zfill(8))
sfile = s.makefile("wb")
shutil.copyfileobj(f, sfile)
sfile.close()
s.close()
f.close()
服务器代码
import socket
import shutil
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = ''
PORT = 31400
s.bind((HOST, PORT))
s.listen(3)
conn, addr = s.accept()
print 'conn at address',addr
conn.sendall('READY')
i=1
f = open(r'file_'+ str(i)+".txt",'wb')
i=i+1
fsize=int(conn.recv(8))
print 'File size',fsize
sfile = conn.makefile("rb")
shutil.copyfileobj(sfile, f)
sfile.close()
f.write(conn.recv(fsize))
f.close()
conn.close()
s.close()
如何获得相同的文件名...以及如果我必须接收任何类型的文件(如.pdf,.txt,.jpeg等)怎么办。请帮助我,我是python的新手。
您要么需要使用ftputil之类的库, 要么以某种方式对文件进行编码,例如UUENCODE 。
或者,您将必须使用单独的事务来实现自己的协议,以发送文件名和大小,然后发送内容。 即
请注意,以上内容并未涵盖处理问题,例如数据丢失,仅ASCII链接,损坏,作为块发送等。请记住,FTP自1971年以来一直在积极使用和开发,并建议在1998年后期进行根本性的更改。
首先,您没有在服务器端以file_.txt的形式收到它,而是打开一个名为file_.txt的新文件,并将其从服务器端收到的内容复制到新创建的file_中。文本
我的解决方案是从文件中获取文件名,并将其与内容一起发送。 获取文件名示例:
import os
print os.path.splitext("path_to_file")[0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.