我正在通过套接字向远程服务器发送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()
我有两个问题:
我应该做些什么修改才能确保在每个文件下载完成后显示“确定”? 非常感谢您的帮助。
答案 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