因此,我试图制作一个将调用客户端程序的服务器程序。如果我自己从命令行调用服务器客户端,则服务器客户端工作正常,但服务器调用时连接被拒绝。为什么这不起作用?
这是服务器代码:
import socket,os
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
os.remove("/tmp/SocketTest")
except OSError:
pass
s.bind("/tmp/SocketTest")
os.system("python compute.py")#compute is the client
#execfile('compute.py')
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(1024)
if not data: break
conn.send(data)
conn.close()
这是客户端代码:
import socket
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/SocketTest")
s.send('Hello, world \n')
s.send('its a mighty fine day')
data = s.recv(1024)
s.close()
print 'Received', repr(data)
我认为错误是您在致电compute.py
之前先打电话listen
。
os.system
将阻止您的服务器,直到对的调用python compute.py
完成。
尝试subprocess.Popen以compute.py
非阻塞方式在服务器并行生成呼叫。调用subprocess.Popen
将python compute.py
在一个新进程中启动,并将继续执行下一行conn, addr = s.accept()
)
#!/usr/bin/env python
import socket
import os
import subprocess
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
os.remove("/tmp/SocketTest")
except OSError:
pass
s.bind("/tmp/SocketTest")
s.listen(1)
sp = subprocess.Popen(["/usr/bin/env", "python", "compute.py"])
conn, addr = s.accept()
while 1:
data = conn.recv(1024)
if not data:
break
conn.send(data)
conn.close()
输出:
Received 'Hello, world \nits a mighty fine day'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句