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

ソケットのタイムアウトを毎回待機したい最大時間に設定できます(今回は待機したい時間になる前にもう一度呼び出します -例外socket.timeout発生します。タイマーの期限が切れた場合は、そのケースをキャッチするために必ず/で囲んでください。(タイムアウト付きの A も機能し、複数のソケットやさまざまな条件で待機できるという利点がありますが、非常に具体的な質問への回答としては少し直接的ではありません)。listentryexcept socket.timeout:select.select

前回そのような回答をしたとき、私は多くの反対票を受け取りました...おそらく、誰も、決して、彼らが不承認の方法でプログラムすることを望んでいる純粋主義者によるものです(たとえば、多くの通常の通常の構成とは対照的に、あなたのような非常に独特な構成を通じて)サーバーの書き方)。今度はどうなるか見てみましょう!-)

于 2010-03-14T23:10:58.643 に答える