我在一个正在开发的多人在线游戏中遇到了一个奇怪的问题。
当用户点击"接受任务"在客户端上,它执行以下操作:
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#')。
服务器在接收数据之后但在对其进行操作之前抛出异常,因此它不是逻辑错误。
我有点茫然,是否有人看到我遗失的任何内容,或者对如何进一步测试此问题有任何建议?
谢谢!
答案 0 :(得分:0)
我建议在服务器的except块中使用sys.exc_info()来查找有关异常的更多信息。