【问题标题】:Odd error when using s.recv() in Python在 Python 中使用 s.recv() 时出现奇怪的错误
【发布时间】:2012-12-08 22:03:40
【问题描述】:

我正在制作一个需要从服务器接收连接哈希的程序。当我使用:

connhash = s.recv(1024)

我收到此错误:

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

这是我的错还是服务器的错?

这是导致 s.recv() 的一些代码

stringfmt = u'%(user)s;%(host)s:%(port)d'
string = stringfmt % data
structfmt = '!bh'
encoded = string.encode('utf-16BE')
packetbytes = struct.pack(structfmt, 2, len(encoded))+encoded
s.send(packetbytes)
connhash = s.recv(1024)

我正在使用 Python v 2.7

编辑:这是为 Minecraft 准备的。

【问题讨论】:

  • 她的服务器关闭了连接 - 可能是因为您发送了一些它不理解的内容,也可能是因为它无法正常工作......如果没有更多信息,就不可能说是谁的错。跨度>
  • 强制对我来说听起来像是一个 RST(与 FIN 相对)......但如果你真的想知道,你可能应该做一个数据包捕获(tcpdump、wireshark 等)。

标签: python sockets client-server


【解决方案1】:

听起来远程服务器不喜欢您的连接并切断了您的连接。这可能意味着您犯了协议错误(即您发送的命令不正确),或者您可能没有成功登录,或者您的 IP 可能已被禁止,或许多其他类似的事情。

要调试它,您可以尝试使用 telnet 之类的东西来复制连接并查看错误发生的位置(如果没有,则说明您的实现有问题;如果有,则说明您的了解协议,或者您被阻止使用服务器)。

或者,使用Wireshark 之类的数据包捕获工具查看正在发送和接收的数据包,看看是否存在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-30
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2011-06-16
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多