在Python中使用s.recv()时出现奇怪的错误

时间:2012-12-08 22:03:40

标签: python sockets client-server

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

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。

1 个答案:

答案 0 :(得分:2)

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

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

或者,使用像Wireshark这样的数据包捕获工具查看正在发送和接收的数据包,看看是否显示问题。