通过tcp

时间:2015-08-25 12:28:19

标签: python windows shell sockets python-3.x

服务器端代码。打开文件,读取文件的一部分,发送该位,直到完成

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")
  1. 我知道我必须使用socket.shutdown(socket.SHUT_WR)通知收件人该文件已完成,但不允许进一步发送。有没有办法绕过那个?也许使用像.shutdown()这样的其他命令?我需要保持连接以进一步发送/接收。
  2. 在处理复杂文件时,我收到的东西比我应该多。我确信客户端会将不相关的先前数据写入文件,并使用client.recv(1024)收到。有没有办法在文件的数据到达之前扔掉#34;或安全地清空数据?
  3. .jpg文件:http://i.stack.imgur.com/kjXBZ.png

    .txt文件:http://i.imgur.com/fVNfx2R.png

    (我没有足够的声誉直接发布图片,对不起。)

1 个答案:

答案 0 :(得分:0)

我可以看到问题背后的两个意图。首先,学习东西;第二,实施一些很酷且有效的东西(有用)。学习过程的一部分是通过阅读文档获取被动知识 - 这适用于opening the file,并使用with构造。

然而,部分学习也是学习更大的图片,并学习其他人(更有能力)如何解决问题。这可以通过阅读现有解决方案的源代码并尝试理解代码来完成。

我建议您获取paramiko模块(https://github.com/paramiko/paramiko.git),并学习sftp_client.pysftp_server.pydemos/

是的,它比你尝试过的几行要复杂得多,但你可能会学到很多东西,而且将来如何使用paramiko的知识可能对你有价值。此外,您将找到更多关注学习的问题。 ;)