gpt4 book ai didi

Python 关闭 TCP 连接

转载 作者:可可西里 更新时间:2023-11-01 02:32:53 30 4
gpt4 key购买 nike

我有一个 python tcp 服务器,每个连接都有一个线程来监听。当我在连接对象上调用 close 时,会抛出“错误的文件描述符”异常。通过谷歌搜索,我找到了一些解决方案,每个解决方案都使用循环来接收客户端数据并在他们决定断开客户端连接时打破该循环。我的客户端是用 C# 编写的并且没有“获取”,它与服务器“断开连接”,python 只是忽略来自 C# 客户端的传入数据。在 python 中从服务器端断开 tcp 连接的合法、最佳实践方法是什么?

提前致谢

最佳答案

错误的文件描述符很可能意味着套接字已被另一个线程关闭。

这里有一些关于一般做法的想法。对于客户端,知道它已断开连接的一种方法是检查 recv() 值是否为 0。如果是,则表示远程端已关闭连接。基本上,您应该使用选择(或轮询)并传递所有客户端和服务器的 fds 以进行选择。如果您在任何 fds 上收到读取事件,那么根据 fd 类型,会发生以下情况。如果 fd 是服务器类型,那么读事件意味着有一个挂起的连接,你应该发出一个 accept() 来获得新的连接。另一方面,如果 hte fd 是非服务器类型(意味着常规 tcp 连接),那么读取事件意味着有一些数据,你应该发出 recv() 事件来读取数据。

您可以使用循环进行选择。基本上,使用 select() 调用启动循环,一旦获得事件,就对该事件执行一些操作,然后重新进入循环并发出下一个 select()。您可能会发现这些链接很有用:http://ilab.cs.byu.edu/python/select/echoserver.htmlhttp://docs.python.org/2/library/socket.html

关于Python 关闭 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557287/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com