Python 检测是否已在TCP套接字上调用“connect()”
如果我觉得这应该是非常明显的,但不知何故我在文档中没有找到: 想想这个Python 检测是否已在TCP套接字上调用“connect()”,python,sockets,Python,Sockets,如果我觉得这应该是非常明显的,但不知何故我在文档中没有找到: 想想这个 import socket my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 如何检查connect()是否已在myu套接字上调用了connect()。目前,我的代码在我的类中设置了一个单独的布尔值,但我相信应该可以向套接字对象询问这一点。为了澄清,我正在编写客户机代码,我想在我的类中提供一些内省,以检查套接字是否已连接到服务器 差不多 my_soc
import socket
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
如何检查connect()
是否已在myu套接字上调用了connect()。目前,我的代码在我的类中设置了一个单独的布尔值,但我相信应该可以向套接字对象询问这一点。为了澄清,我正在编写客户机代码,我想在我的类中提供一些内省,以检查套接字是否已连接到服务器
差不多
my_socket.is_connected()
=> False
my_socket.connect(("127.0.0.1", 42))
=> None
my_socket.is_connected()
=> True
尝试调用getpeername()
并处理未连接时产生的错误或状态。如果要检测是否调用了connect
,可以像下面这样子类化socket.socket
:
class Sock(socket.socket):
def connect(self, *args, **kwargs):
super().connect(*args, **kwargs)
print("tried to connect!")
然后使用Sock
,就像使用socket.socket一样:
my_socket = Sock(socket.AF_INET, socket.SOCK_STREAM)
你在任何地方接受连接吗?不,我正在连接到服务器。如果你是客户端,那么你应该是调用连接的人,其他套接字不应该连接到你。我知道你的意思。我正在调用connect,我想要一种方法来检查我是否调用了connect
。我明白了-这是我希望标准API提供的东西。@NielsB。为什么?Java提供了一个isConnected()
方法,它几乎毫无用处。它所做的只是让人们误以为,如果它返回true,那么连接仍然是连接的,这根本就不意味着。为什么您的应用程序还不知道它在哪里?解决这个问题的简单方法是永远不要创建未连接的套接字。它们没有多大用处。我得出了相同的结论。在建立连接之前,将socket实例变量设置为None。