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

标签 python sockets networking tcp tcpclient

我有以下代码,这是不言自明的:

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 block 尝试发送数据,如果抛出异常则捕获异常,并重新建立连接:

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 - 如何检查套接字是否仍然连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48024720/

相关文章:

python - 我可以在 numpy 矩阵上使用 xor 吗?

Docker Compose 网络多播

用于编写 P2P 应用程序的 Python 库/框架

python - Ubuntu 上的 Docker 网络主机

python - 使用 PyGitHub 和 PyGit2 创建、克隆并推送到 GitHub 存储库

python - Python OpenCV-如何仅查找在给定两组点的情况下对齐两个图像所需的旋转和平移? (无仿射,无翘曲)

python - 从 pandas.DataFrame 列配置 Bokeh 的工具提示

python - 错误 : [Errno 111] Connection refused - Python, Selenium

c++ - QTcpServer::incomingConnection(qintptr socketDescriptor) 是否可以连接指定的套接字?

python - PlanetLab 上的 Scapy