gpt4 book ai didi

python - 多线程应用程序未正确输出

转载 作者:行者123 更新时间:2023-12-03 12:09:00 26 4
gpt4 key购买 nike

我最近被介绍到 python 中的线程模块,所以我决定尝试一下我在端口 7000 上打开了一个 python 套接字服务器:

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',7000))
s.listen(1)
c, a = s.accept()

并让我的客户端服务器尝试连接从 1 到 65535 的每个端口,直到它在端口 7000 上建立连接。显然这需要很长时间,所以我对它进行了多线程处理:
import threading
import socket
import sys
host = None
def conn(port):
try:
s.connect((host,port))
print 'Connected'
sys.exit(1)
except:
pass
global host
host = '127.0.0.1'
for i in range(65535):
t = threading.Thread(target=conn, args=(i,))
t.start()

当客户端连接时,它假设返回消息“已连接”但是在调试时我注意到程序有一些非常奇怪的行为。有时程序会返回它已连接,有时程序将无法输出它已连接到服务器,而是会终止而不打印任何内容。

这显然是线程的问题。当我让客户端连接到端口 7000 时,它只有 100% 的时间工作。然而,通过所有 65535 端口将其线程化会导致客户端有时不打印任何内容。这是什么原因,我该如何预防或规避它。

编辑:
我意识到让它尝试连接到较少数量的端口,端口 1-10 和端口 7000,使它有更高的打印连接的机会。

最佳答案

如果 connect()失败,将套接字的状态视为未指定。可移植应用程序应该关闭套接字并创建一个新的用于重新连接。

>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(('127.0.0.1', 6999))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 61] Connection refused
>>>
>>> s.connect(('127.0.0.1', 7000))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 22] Invalid argument
>>>
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(('127.0.0.1', 7000))
# Connect success.

关于python - 多线程应用程序未正确输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com