C# 中是不是有 .isConnected 功能的 python 等效项
Posted
技术标签:
【中文标题】C# 中是不是有 .isConnected 功能的 python 等效项【英文标题】:Is there a python equivalent for .isConnected functionality in C#C# 中是否有 .isConnected 功能的 python 等效项 【发布时间】:2021-07-20 01:42:25 【问题描述】:我一直在寻找与 PYTHON 中 C# 的 [isConnected() 功能] 等效的东西。 https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.connected?view=net-5.0
我基本上需要的是检查另一端(主服务器)上的套接字连接是否仍然打开。如果没有,请将连接移至新的套接字(备份服务器)。
对于如何将现有连接移动到另一台服务器而无需重新连接,我一直很茫然。任何形式的指导和帮助将不胜感激。
现在,我与服务器的连接是在 Login() 处完成的。我希望以防万一主要断开连接,现有用户名移动到次要用户名。他只应该执行文件和文字操作。我应该在我的代码中做哪些更改来实现这一点。
我目前的代码结构是: 客户端:
def file_operation():
do_something
def word_addition():
do_something
def login():
s.connect(host,port)
if __name__ == "__main__":
服务器端:
def accept_client():
s.accept
do_something
def GUI():
accept_client()
if __name__ == "__main__":
【问题讨论】:
试图从中获取什么信息?早点好了吗? 即使在 C# 中.isConnected()
也没有真正做太多事情。特别是,尽管它的名字,它并不能真正告诉你是否仍然有连接。
@KlausD。我的要求是:我需要查看主套接字是否连接。如果没有,则将现有的客户端连接移动到备份服务器...
@gunr2171 链接中使用的功能适用于 C#。我在 Python 中需要同样的功能
你可以看到一个socket没有连接,但是你不能reliability看到它是否连接。只需发送必须发送的任何内容,并在引发异常时处理它们。
【参考方案1】:
根据Python Sockets documentation,不,没有。 Python 套接字只是 Berkeley 套接字 API 的一个包装器,所以无论该 API 中的内容是什么,Python API 中都是如此。
如果您查看the source code for Microsoft's Socket.cs class,您会看到它们维护一个boolean flag field m_IsConnected
来指示套接字的当前连接状态。您可以对自己的自定义套接字类执行相同的操作,使用 Microsoft 的代码作为编写 Python 代码的模型。
或者,您可以像往常一样简单地使用套接字,并在发生套接字错误时切换到不同的服务器。
【讨论】:
是的,我需要将现有的连接信息移动到不同的服务器。这就是我想要达到的目标。但我没有得到关于如何朝那个方向前进的方法。如果您知道如何将现有的连接信息移动到不同的服务器而无需重新连接,请您解释一下how I can move my existing connection information to different server without having to reconnect
-- 你不能。套接字不是那样工作的。您必须断开与原始服务器的连接并与新服务器建立新连接。
现在,我的客户端正在使用用户名连接服务器。服务器维护该信息。突然间,primary 崩溃了,secondary 不得不承担 primary 的责任。现在我希望用户不要再次输入用户名。刚刚开始执行他的活动。我怎样才能做到这一点?
通过把用户名保存在客户端,这样用户就不用再输入了?
我已经对我的问题进行了更改,以更好地阐明我想要什么。另外,保存你的意思是我对用户名进行硬编码?另外,即使我在客户端维护一个用户名列表,这将如何帮助备份服务器维护连接信息。服务器如何知道哪些客户端已经连接?以上是关于C# 中是不是有 .isConnected 功能的 python 等效项的主要内容,如果未能解决你的问题,请参考以下文章
比isConnected()更靠谱的的获取socket实时连接状态!
连接性 - 如何手动/以编程方式将 IsConnected 属性设置为 False
GoogleApiClient.isConnected() 在飞行模式下返回 true