python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python 套接字Accept

Python 套接字 Accept 超时问题解析

作者:迹忆客

本文讨论了 Python 中套接字的超时功能,该功能对于缓解无限期等待套接字接受的问题是必要的,下面通过本文给大家大家介绍Python 套接字 Accept 超时问题,需要的朋友可以参考下

套接字是网络通信的基本构建块。 每当两个网络实体需要传输数据时,就会打开一个套接字。

这些套接字在会话期间保持连接。 但有时,在 Python 中使用套接字时,您可能会等待很长时间,而另一端仍然接受套接字连接。

本文讨论了 Python 中套接字的超时功能,该功能对于缓解无限期等待套接字接受的问题是必要的。

套接字接受、拒绝和超时

每当您尝试使用 Python 脚本建立与服务器的连接时,您都需要打开一个套接字连接。 此套接字连接充当在客户端和服务器之间传输数据的隧道。

在打开socket的过程中,有三种场景。

套接字方法及其在 Python 中的使用

Python 有一个名为 socket 的内置库,您需要导入它才能使用套接字连接。 让我们看看套接字库的一些重要方法。

Python 中的套接字接受超时示例

让我们在 Python 代码的帮助下看一个套接字接受超时的例子。 对于此示例,我们需要编写两个 Python 脚本,一个用于服务器,另一个用于客户端。

我们将看到三种不同的场景,如下所述。

请注意,根据您的操作系统,请求可能会在一段时间后自动拒绝。

下面我们一一看看上面三种情况的代码。

未设置超时限制时 Python 中的套接字接受超时

服务器端脚本:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.bind(('', 1717))

客户端脚本

import socket
 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.connect(('127.0.0.1', 1717))

您在服务器端看不到 listen() 方法。 因此,服务器没有响应,客户端正在等待。

设置超时时Python中的套接字接受超时

在这种情况下,您会看到客户端在超过超时时间后中止操作并引发 TimeoutError。

服务器端:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('', 1717))

客户端脚本

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.settimeout(3)
     s.connect(('127.0.0.1', 1717))

在这种情况下,会引发 Python 套接字 TimeoutError。 请注意,套接字的行为可能因平台而异。

在 Linux 机器上,套接字抛出 ConnectionRefusedError: [Errno 111] Connection refused 错误,直到您不接受服务器端的套接字。

在 Python 中为每个套接字设置默认超时

此方法将为所有新套接字设置相同的默认超时。 这样,您可以通过为每个套接字单独设置超时来节省时间和麻烦。

服务器端:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('', 1717))

客户端:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    socket.setdefaulttimeout(3)
    s.connect(('127.0.0.1', 1717))

请注意 ,对于 setdefaulttimeout() ,您必须直接使用套接字类而不是对象,因为它为所有线程设置超时。

总结

套接字超时是 Python 套接字编程的一个重要方面。 如果您不处理超时,您可能会让您的客户端永远等待套接字。

或者在其他情况下,根据您的环境实现,它可能会引发错误。

到此这篇关于Python 套接字 Accept 超时的文章就介绍到这了,更多相关Python 套接字Accept 超时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文