在套接字中使用json.loads()时不能使用任何时间函数:

2024-06-02 05:57:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python中的套接字制作一个基于控制台的多人蛇游戏。然而,我面临着一个非正统的问题。无论何时,我使用任何时间函数,比如time.sleep()或win.timeout(),json.loads()都会引发异常:json.decoder.jsondecoderror:Extra data:line 1 column 72(char 71) 我已经查找了错误并且没有解码多个JSON对象。我也尝试过使用pickle,但是错误一直存在,直到我没有注释掉时间函数

客户:

while 1:
x = s.recv(1024)
snake = json.loads(x)['snake']
snake2 = json.loads(x)['me']
win.border(0)
win.addstr(0, 2, 'Score : ' + str(score) + ' ')
win.addstr(0, 27, ' SNAKE ')
#win.timeout(75) Works fine untill this is commented out
#or this time.sleep(1)
prevKey = key
event = win.getch()
key = key if event == -1 else event
if key not in [KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, 27]:
    key = prevKey
win.addch(snake[0][0], snake[0][1], '0')
win.addch(snake2[0][0], snake2[0][1], '0')
last = snake.pop()
win.addch(last[0], last[1], ' ')
last = snake2.pop()
win.addch(last[0], last[1], ' ')

服务器:

me = [[4,10], [4,9], [4,8]] 
snake1 = [[6,10], [6,9], [6,8]]
snakes.append(snake1)
snakes.append(me)
while True: 
    time.sleep(0.001)

    x = {
         "snake":snake1 , 
         "me" :me
        }
    c.send(bytes(json.dumps(x) , 'utf8'))

Tags: keyeventjsontime时间sleepwinme
1条回答
网友
1楼 · 发布于 2024-06-02 05:57:22

您的服务器代码在发送JSON字符串之前使用UTF-8将其编码为字节,因此您的客户机应该在将其加载为JSON之前使用UTF-8将字节解码为字符串:

x = s.recv(1024)
data = json.loads(x.decode('utf8'))
snake = data['snake']
snake2 = data['me']

相关问题 更多 >