Python - 如何检查套接字是否仍然连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - 如何检查套接字是否仍然连接相关的知识,希望对你有一定的参考价值。

我有以下代码,这是自我解释:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(host, port)
s.send("some data")
# don't close socket just yet... 
# do some other stuff with the data (normal string operations)
if s.stillconnected() is true:
    s.send("some more data")
if s.stillconnected() is false:
    # recreate the socket and reconnect
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(host, port)
    s.send("some more data")
s.close()

我如何实现s.stillconnected()我不希望盲目地重新创建套接字。

答案

如果服务器连接不再处于活动状态,则调用send方法将引发异常,因此您可以使用try-exception块尝试发送数据,捕获异常(如果它被抛出)并重新建立连接:

try:
    s.send("some more data")
except:
    # recreate the socket and reconnect
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(host, port)
    s.send("some more data")

编辑:根据@ Jean-Paul Calderone的评论,请考虑使用sendall方法,这是一种发送所有数据或抛出错误的更高级别方法,而不是send,这是一种不保证传输的低级方法所有数据,或使用更高级别的模块,如可以处理套接字生命周期的HTTP库。

以上是关于Python - 如何检查套接字是否仍然连接的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.5.1 - Asyncio - 检查套接字客户端是不是已断开连接

使用 Python 检查 Telnet 是不是仍然连接

C#检查套接字是不是断开连接?

我如何检查我的设备是否与互联网连接

Delphi + Synapse:如何检查我是不是仍然连接

有啥方法可以检查套接字连接是不是可用?