服务器端代码。打开文件,读取文件的一部分,发送该位,直到完成
f = open("{}".format(filename), "rb")
l = f.read(1024)
while (l):
print("Sending...")
client.send(l)
l = f.read(1024)
print("Finished sending")
f.close()
client.shutdown(socket.SHUT_WR)
client.close()
客户端代码,创建文件接收它的一部分,将其写入文件直到完成。
f = open("{}".format(filename), "ab+")
l = client.recv(1024)
while (l):
print("Receiving...")
f.write(l)
l = client.recv(1024)
f.close()
print("Transmission completed")
socket.shutdown(socket.SHUT_WR)
通知收件人该文件已完成,但不允许进一步发送。有没有办法绕过那个?也许使用像.shutdown()
这样的其他命令?我需要保持连接以进一步发送/接收。client.recv(1024)
收到。有没有办法在文件的数据到达之前扔掉#34;或安全地清空数据? .jpg文件:http://i.stack.imgur.com/kjXBZ.png
.txt文件:http://i.imgur.com/fVNfx2R.png
(我没有足够的声誉直接发布图片,对不起。)
答案 0 :(得分:0)
我可以看到问题背后的两个意图。首先,学习东西;第二,实施一些很酷且有效的东西(有用)。学习过程的一部分是通过阅读文档获取被动知识 - 这适用于opening the file,并使用with
构造。
然而,部分学习也是学习更大的图片,并学习其他人(更有能力)如何解决问题。这可以通过阅读现有解决方案的源代码并尝试理解代码来完成。
我建议您获取paramiko
模块(https://github.com/paramiko/paramiko.git),并学习sftp_client.py
,sftp_server.py
和demos/
。
是的,它比你尝试过的几行要复杂得多,但你可能会学到很多东西,而且将来如何使用paramiko的知识可能对你有价值。此外,您将找到更多关注学习的问题。 ;)