服务器在接收到1个数据包字符串时断开客户端,而不是另一个

时间:2016-12-10 01:06:42

标签: python server client

我在一个正在开发的多人在线游戏中遇到了一个奇怪的问题。

当用户点击"接受任务"在客户端上,它执行以下操作:

packet = "A:io-QS#"
tcpClient.send(packet.encode('utf-8'))

在服务器上,为每个处理发送/接收数据的客户端创建了一个线程:

while (client[self.id].authenticated == True):
    try:
        data = (self.connection.recv(1024)).decode('utf-8')
        client[self.id].lastPacketTime = time.time()
        client[self.id].processData(data)
    except:
        print("Client disconnected due to data receive error")
        client[self.id].saveDataToDatabase()
        client[self.id].authenticated = False
        client[self.id].loggedIn = False

如果服务器收到数据包" A:io-QS#",则会抛出异常并断开客户端连接。我修改了提到的客户端代码aboe发送数据包" M:w#" (定向移动包)并且它不会抛出异常,
只有当数据包是" A:io-QS#"。 数据包大小不是一个问题(包含登录凭据的更大的数据包通过此服务器循环就好了)。 我试着评论"客户端[self.id] .processData(data)"行和异常仍然发生(但只有数据包' A:io-QS#')。 服务器在接收数据之后但在对其进行操作之前抛出异常,因此它不是逻辑错误。

我有点茫然,是否有人看到我遗失的任何内容,或者对如何进一步测试此问题有任何建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议在服务器的except块中使用sys.exc_info()来查找有关异常的更多信息。