【问题标题】:TCP Server receiving from client doesn't work sometimes从客户端接收的 TCP 服务器有时不起作用
【发布时间】:2013-03-09 17:25:49
【问题描述】:

我正在为我自己的协议使用 Python 编写的服务器,但我遇到了问题。 客户端连接服务端,sendall()的三条数据:包标识字节、字符串长度、UTF-8编码字符串。

在客户端,我没有收到任何错误,但在服务器端,这是:

error: [Errno 10054] An existing connection was forcibly closed by the remote host

发生。错误每次都发生在不同的行,有时在recv()ing 标识字节时,有时在读取字符串长度时,有时在读取字符串本身时,有时它工作得非常好,就像它应该做的那样。

这里发生了什么?服务器计算机有防火墙例外。客户端连接,连续发送三条数据,然后关闭套接字。我这样做是不是太快了?

谢谢。

【问题讨论】:

  • 请发布(即复制、粘贴、格式化 SO)来自服务器和客户端代码的相关代码片段。最好是其他人可以运行以自行尝试的代码。此外,请描述任何attempts you have made to solve this problem 以及您认为它们不起作用的原因。
  • 管理这个的代码分散在几个类中,@crazeewulf,试图以可重用的方式重建它将是一项巨大的努力。这个错误看起来像一个套接字级错误,我希望有人能用我提供的一般信息给我一个一般性的答案。如果这没有发生,我会制作样品。谢谢。
  • OP,在这种情况下,以this 代码为例,编写您自己的微型 TCP 服务器和客户端,并一遍又一遍地发送与您的大型应用程序相同的数据。看看能否重现问题。使用此测试代码和错误消息(如果有)报告结果。基本上,尝试将问题归结为一个小代码片段,SO 上的其他人可以使用它来调试此问题。

标签: python sockets networking protocols


【解决方案1】:

嗯,这不是一个长期存在的问题。

看起来我关闭套接字客户端的速度太快了,在添加限制后,我停止了错误。

谢谢!

【讨论】:

    【解决方案2】:

    此问题的通常原因是写入已被对等方关闭的连接:换句话说,应用程序协议错误,写入永远不会被读取的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2011-11-14
      • 2017-12-29
      • 2012-03-05
      • 2023-04-03
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多