簡體   English   中英

多個網絡套接字python

[英]multiple network sockets python

我正在創建一個偵聽多個端口(在portslist中定義)的python腳本,當有人連接到這些端口中的任何一個時,將向它們發送“ hello”消息。 當前,下面的代碼為端口列表中的所有端口創建套接字,但僅將消息發送到最后一個端口上的通信。

謝謝

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()

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM