2013-03-09 64 views
1

我正在为使用自己的协议编写的Python服务器上工作,但我遇到了问题。 客户端连接到服务器,并且sendall()的三条数据:数据包标识字节,字符串长度和UTF-8编码字符串。从客户端接收的TCP服务器有时不起作用

在客户端,我没有错误,但在服务器端,此:

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

发生。错误发生在每次不同的行上,有时候是识别字节,有时在读取字符串长度时,有时在读取字符串本身时,有时它会很好地工作,就像它应该的那样。

这是怎么回事?服务器计算机具有防火墙异常。客户端连接,连续发送三个数据,然后关闭套接字。我做得太快了吗?

谢谢。

+0

请从服务器和客户端代码发布(即复制,粘贴,格式化SO)相关代码片段。最好是别人可以运行的代码来自己尝试。此外,请描述您尝试解决此问题的任何尝试(http://whathaveyoutried.com/)以及为什么您认为他们无法正常工作。 – crayzeewulf 2013-03-09 01:17:06

+0

管理这个的代码分散在几个类,@crazewulf,这将是一个很大的努力,试图以可重用的方式重建。这个错误看起来像一个套接字级的错误,我希望有人会给我一个普遍的答案,我提供的一般信息。如果没有发生,我会制作样品。谢谢。 – Jishaxe 2013-03-09 01:22:34

+0

OP,在这种情况下,使用[this](http://docs.python.org/2/library/socketserver.html#socketserver-tcpserver-example)代码作为示例编写您自己的小型TCP服务器和客户端,并发送与您的大型应用程序相同的数据。看看你是否可以重现这个问题。用这个测试代码和错误消息报告结果(如果有的话)。基本上,试着把问题归结为一个小的代码片段,SO可以被其他人用来调试这个问题。 – crayzeewulf 2013-03-09 01:24:14

回答

2

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

它看起来像我关闭套接字客户端太快,添加一个限制后,我停止得到错误。

谢谢!

0

这个问题的常见原因是写入已经被peer关闭的连接:换句话说,应用程序协议错误,写入永远不会被读取的数据。