3

我正在制作制作 tcp 套接字并在端口范围内工作的服务器,每个端口都会在该端口上侦听一段时间,然后继续其余代码。

像这样::

import socket

sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

msg =''
ports = [x for x in xrange(4000)]
while True:
    try:
        for i in ports:
            sck.bind(('',i))
            ## sck.listen(1)
            ## make it just for some time and then continue this

            ## if there a connection do this
                conn, addr = sck.accept()
                msg = conn.recv(2048)
                ## do something
            ##if no connection continue the for loop
            conn.close()
    except KeyboardInterrupt:
        exit()

那么我怎样才能让 sck.listen(1) 工作一段时间?

4

1 回答 1

12

您可以将套接字上的超时设置为每次要等待的最长时间(在每次listen要等待的时间之前再次调用它)-您会得到一个异常socket.timeout,如果计时器到期,所以一定要在它周围有一个try/except socket.timeout:来捕捉这种情况。(select.select带有超时的 A 也可以工作,并且具有能够在多个套接字上等待各种条件的优势,但作为对您非常具体的问题的答案,它有点不那么直接)。

上次我给出这样的答案时,我得到了很多反对意见......大概是纯粹主义者想要确保没有人以他们不赞成的方式进行程序(例如,通过像你这样的非常特殊的结构,而不是许多正常的,通常的编写服务器的方式)。让我们看看这次会发生什么!-)

于 2010-03-14T23:10:58.643 回答