Python sockets连接超时问题

标签 python sockets python-3.x

我正在尝试编写一个连接到 freenode IRC 网络(端口 6667 上的 irc.freenode.net)的简单脚本,以定期在 channel 上发布信息。为此,我使用了 Python 套接字。这在过去工作得很好,但现在我遇到了一个奇怪的问题:套接字需要很长时间才能连接(如果它确实连接的话)(它偶尔会超时)。但是,这仅在从文件运行脚本时才会发生。当直接输入解释器时,它工作正常:

>>> import socket
>>> def f():
>>>    s = socket.socket()
>>>    print("Connecting")
>>>    s.connect(('irc.freenode.net', 6667))
>>>    print("Connected")
>>>    s.close()
>>> f()

套接字在大约一秒钟内连接,一切正常。但是,如果我将以下代码放入文件中并运行 python test.py,它会在 s.connect 上挂起并偶尔超时:

import socket
s = socket.socket()
print("Connecting")
s.connect(('irc.freenode.net', 6667))
print("Connected")
s.close()

我以前从来没有遇到过这个问题。这也发生在我网络上的其他计算机上(也许是网络问题?)。我正在使用 Python 3.2。谢谢。

最佳答案

网络总是会间歇性出现问题,您的代码需要处理这些问题。我建议采取两个层次的行动。首先,在 socket.create_connection 上使用 timeout= 参数在放弃之前等待更长的时间。然后将套接字打开放在 try except socket.timeout 对中并重试几次,可能在两次重试之间休眠一两秒。

关于Python sockets连接超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169481/

相关文章:

Python 字符串中不一致的特殊字符存储

python - 在将字符串强制转换为 unicode 时如何让 python 2.x 发出警告?

python - 在python中通过身份验证连接到套接字

node.js - 如何使用sendHandle不丢失数据?

python - 过滤引号内的 df 值

python - 绘制音频波形和频谱图重叠

python - 有没有办法告诉你的 python 文件在哪里?

C# 多线程和套接字问题

python - 符合文本大小的 tkinter.Text 不适用于多个实例

python - Elasticsearch查询未返回正确的响应