Невозможно использовать любую функцию времени при использовании json.loads () в сокетах: - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь сделать консольную многопользовательскую игру в змею с использованием сокетов в python.Однако я сталкиваюсь с неортодоксальной проблемой.Всякий раз, когда я использую любую функцию времени, скажем, time.sleep () или win.timeout (), json.loads () вызывает исключение: json.decoder.JSONDecodeError: Дополнительные данные: строка 1, столбец 72 (символ 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'))

1 Ответ

0 голосов
/ 19 марта 2019

Ваш серверный код кодирует строку JSON в байты с использованием UTF-8 перед отправкой, поэтому ваш клиент должен декодировать байты в строку с UTF-8, прежде чем загружать ее как JSON:

x = s.recv(1024)
data = json.loads(x.decode('utf8'))
snake = data['snake']
snake2 = data['me']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...