我正在研究一个基本的python程序,以便习惯于线程化和网络化,而且我在代码的一个部分已经变得有点不知名了。
我拥有的是:
#make a socket and loop to obtain connections
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ads = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1" , 4000))
ads.bind(("127.0.0.1" , 4001))
s.listen(10)
ads.listen(1)
socks = [s,ads]
connections = [] # list of connections
while True:
if ads:
(c,a) = ads.accept()
t = threading.Thread(target = admin_client, args = ())
t.start()
elif :
(c,a) = s.accept()
connections.append(c)
t = threading.Thread(target = handle_client, args = (c,a))
t.start()
我希望发生的是当广告端口被访问时,它会将其分配给它似乎执行的admin_client方法,但如果在端口上连接任何东西,它将不会做任何事情。
有没有人有这方面的解决方案,所以两个客户端都会连接没有问题?
答案 0 :(得分:1)
if ads:
始终为True。您需要使用select
。由于if ads:
始终为True,因此您需要等待有人连接到广告端口的(c,a) = ads.accept()
。
像(未经测试)的东西:
r,w,x = select.select(socks,[],[])
if ads in r:
...
elif s in r:
...