【发布时间】:2016-07-01 21:44:34
【问题描述】:
我有一个关于 Python 套接字编程的问题。我对套接字很陌生,可能对它们的工作原理了解甚少。我需要在运行 python 应用程序时在两台机器之间传输二进制文件,并认为做一些套接字编程会比做系统命令 scp 或 netcat 更好/更快。但由于某种原因,如果我在我的机器之间传输一个 1GB 的图像,大约需要 14 秒。如果我通过 SCP 完成它只需要大约 9 个。这似乎很奇怪,因为 SCP 是出了名的慢。我希望我的传输速度可以与 netcat 相媲美,但我无法实现这一目标。
服务器:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 50000))
s.listen(1)
img = open('test.img', 'rb')
client, addr = s.accept()
l = img.read(4096)
while(l):
client.send(l)
l = img.read(4096)
img.close()
s.close()
客户:
host = ''
port = 50000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
img = open('./newimg.img', 'wb')
l = s.recv(4096)
while(l):
img.write(l)
l = s.recv(4096)
img.close()
s.close()
这显然是非常基本的,缺少很多功能和异常处理,但它至少可以传输一个文件(虽然速度很慢)。我显然已经从我的代码中删除了一些细节,比如“主机”变量。
我该如何改进?
谢谢!
【问题讨论】:
-
尝试设置 TCP_NODELAY。如果发送/接收阻塞有问题,那么它可能会有所帮助。
标签: python python-2.7 sockets