Форум сайта python.su
13
Вот отрывки из кода:
def accepting(): global SOCKETS_STAT, SOCKETS, IPS while not STOP: u, i = main_sock.accept() u.setblocking(0) #SOCKETS.append(u) IPS[i] = u SOCKETS_STAT[i] = {"our_key": newkeys(1024), "his_key": None, "auth_login": None, "partner_login": None, "accept_pm": True, "ip": i} print(SOCKETS_STAT) ########################
def receiving(): global SOCKETS_STAT while not STOP: for sock_ip in list(IPS.keys()): # sock is IP, again. I wanted to use sock link as index, but then realised, that socket object modifies, so it cant be indexed sock = IPS[sock_ip] try: data = sock.recv(4096) except: continue # No incoming data if not data: # Socket is disconnected remuser(sock_ip) continue print(SOCKETS_STAT, sock_ip) # {} ('127.0.0.1', 54364) ПОЧЕМУ, ВЕДЬ НИКТО НИЧЕГО НЕ МЕНЯЛ! if not SOCKETS_STAT[sock_ip]["his_key"]: ... # И тут как раз и есть ошиька KeyError
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Отредактировано DamMercul (Авг. 8, 2018 13:45:40)
Офлайн
221
а вы уверены что SOCKETS_STAT в обоих случая ссылается на один и тот же объект? встроенная id функция вам в помощь
Офлайн
13
Все нормально с ссылками. Просто это я тупанул) RSA ключ создаются немного долговато, а поток с принятием сообщений не ждет, вот и выходит ошибка. Я все испавил - спасибо за ответ
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн