Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检测是否已在TCP套接字上调用“connect()”_Python_Sockets - Fatal编程技术网

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。