同步wget命令通过python中的socket发送

时间:2011-12-03 11:53:52

标签: python sockets wget synchronous

我正在通过套接字向远程服务器发送wget命令。 这是客户端代码:

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.1.16',12345))
s.send('wget http://url/file1')
print "file 1 OK"
s.send('wget http://url/file2')
print "file 2 OK"
s.send('wget http://url/file3')
print "file 3 OK"
s.close()

服务器上,代码如下:

#!/usr/bin/env python
import socket
import subprocess
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 12345))
s.listen(1)
conn, addr = s.accept()
while True:
    data = conn.recv(1024)
    cmd = ['/bin/sh', '-c', data]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE).wait()

我有两个问题:

  1. 发送到服务器的指令已分组。服务器只接收1而不是3条指令
  2. 的串联,而不是3条指令
  3. 服务器尚未完成时立即显示“文件n确定”。
  4. 我应该做些什么修改才能确保在每个文件下载完成后显示“确定”? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

昨天我有similar problem。您需要一些方法让服务器发出“我已经完成了”的信号。

在客户端代码中,您需要等待服务器准备就绪。在这个简单的协议中,任何响应都意味着“我已经完成了”。如果需要,可以进行更多错误检查。

s.send('wget http://url/file1')
print "file 1 OK"
s.recv(1024) # Wait for ANY response
s.send(....

服务器代码......

while True:
    data = conn.recv(1024)
    cmd = ['/bin/sh', '-c', data]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE).wait()
    conn.send('done') # Send something, ANYTHING
# EOF