Найти - Пользователи
Полная версия: Капец космического уровня
Начало » Python для новичков » Капец космического уровня
1
DamMercul
Вот отрывки из кода:
 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) ########################
После этого SOCKETS_STAT никак не модифицируется, принт выводит все правильно. Нооооо, в другом потоке тем временем(выполняется действие только после accepting:
 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
Халп пожалуйста, я с этим чатом уже 3ий день… вы поняли

UPD: SOCKETS_STAT дефайнится в начале кода
JOHN_16
а вы уверены что SOCKETS_STAT в обоих случая ссылается на один и тот же объект? встроенная id функция вам в помощь
DamMercul
Все нормально с ссылками. Просто это я тупанул) RSA ключ создаются немного долговато, а поток с принятием сообщений не ждет, вот и выходит ошибка. Я все испавил - спасибо за ответ
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB