首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python套接字永远只在循环的第一次迭代中使用?

问Python套接字永远只在循环的第一次迭代中使用?
EN

Stack Overflow用户
提问于 2021-12-11 12:59:06
回答 1查看 33关注 0票数 0

标题说明了一切。循环将永远用于第一个端口,而其余端口只需花费1秒。

代码语言:javascript
复制
import socket
target = "192.168.0.104"


try:
    for port in range(52,85):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        socket.setdefaulttimeout(1)
        result=s.connect_ex((target,port))
        if result == 0:
            print("Port {} is open".format(port))
        else:
            print("Port {} is closed".format(port))
        s.close()
        # break

except KeyboardInterrupt:
    print ('you stopp it manually')

except socket.gaierror:
    print ("Cant resolve host name")
EN

回答 1

Stack Overflow用户

发布于 2021-12-11 13:32:35

代码语言:javascript
复制
for port in range(52,85):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.setdefaulttimeout(1)
    ...

首先创建套接字,然后调用socket.setdefaulttimeout。但来自the documentation

Socket.setdefaulttimeout(超时) 将新套接字对象的默认超时设置为秒(浮动)。当首次导入套接字模块时,缺省值为None。有关可能的值及其各自的含义,请参见settimeout()。

因此,您创建的第一个套接字不会受到默认超时的影响,因为您在创建套接字之后设置了它。所以花了那么长时间。

除此之外,用相同的值一次又一次地调用socket.setdefaulttimeout没有多大意义。由于新设置将影响所有新创建的套接字,因此在创建任何套接字之前调用一次就足够了。

代码语言:javascript
复制
socket.setdefaulttimeout(1)
for port in range(52,85):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70315352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档