Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多网络套接字python_Python_Sockets_Select_Network Programming - Fatal编程技术网

多网络套接字python

多网络套接字python,python,sockets,select,network-programming,Python,Sockets,Select,Network Programming,我正在创建一个python脚本,它侦听多个端口(在portslist中定义),当有人连接到其中任何一个端口时,会向他们发送一条“hello”消息。目前,下面的代码为端口列表中的所有端口创建套接字,但只向最后一个端口上的通信发送消息 谢谢 servers = [] for port in portlist: datasocket = ("0.0.0.0", port) server = socket.socket(socket.AF_INET, socket.SOCK_STREA

我正在创建一个python脚本,它侦听多个端口(在portslist中定义),当有人连接到其中任何一个端口时,会向他们发送一条“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\u server
将是如下列表:

因此,ready_server中s的
将迭代这些列表,而不是套接字

此外,该循环中的
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()

首先,您在
while
循环下的缩进不好