2014-03-26 49 views
0

我正在創建一個監聽多個端口(在portslist中定義)的python腳本,當有人連接到這些端口中的任何一個時,「hello」消息將發送給他們。目前,下面的代碼爲portlist中的所有端口創建套接字,但僅向最後一個端口上的通信發送消息。多個網絡套接字python

感謝

servers = [] 
for port in portlist: 
    datasocket = ("0.0.0.0", port) 

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    server.bind(datasocket) 
    server.listen(5) 

    servers.append(server) 


while True: 
ready_server = select.select(servers, [], []) 


for s in ready_server: 
     connection, address = server.accept() 
     print str(address) + " has connected!\n" 
     msg ="hello\n" 
     connection.send(msg) 
     connection.close() 
+0

一個,你說'while'循環下有壞的縮進 –

回答

1

select.select回報,ready_server將是列表的列表如下:

[[<sockets ready to read from>], [], []]

所以for s in ready_server將遍歷這些列表,而不是在插座。

此外,該循環內的server.accept()不引用任何循環變量,而是引用前一循環的server

試試這個:

servers = [] 
for port in portlist: 
    datasocket = ("0.0.0.0", port) 

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    server.bind(datasocket) 
    server.listen(5) 

    servers.append(server) 


while True: 
    # unpack the returned list 
    ready_server, _, _ = select.select(servers, [], []) 


    for s in ready_server: 
     # use s.accept instead of server.accept 
     connection, address = s.accept() 
     print str(address) + " has connected!\n" 
     msg ="hello\n" 
     connection.send(msg) 
     connection.close()