所以我试图制作一个服务器程序来调用客户端程序。如果我自己从命令行调用它们,服务器客户机工作正常,但是当服务器调用它时,连接被拒绝。为什么这样不行?在
这是服务器代码:
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()
这是客户代码:
^{pr2}$
os.system
将运行您给它完成的命令,您在调用listen
之前执行此操作。因此,客户端将在侦听之前尝试连接到服务器。只有客户机退出后,服务器才会越过这行代码,真正开始监听和接受连接。在您可能要做的是在调用
listen
之后,但在调用accept
(即开始阻塞时),使用subprocess.Popen
生成子进程,而不是等待它。在我认为错误是您在调用
listen
之前调用了compute.py
。在os.system
将阻止您的服务器,直到对python compute.py
的调用完成。在尝试使用subprocess.Popen以非阻塞方式在服务器上并行生成对
compute.py
的调用。调用subprocess.Popen
将在新进程中启动python compute.py
,并将继续执行下一行conn, addr = s.accept()
)结果是:
^{pr2}$相关问题 更多 >
编程相关推荐