Написал небольшое сетевое приложение для сервера и клиента.
Задумка в том чтобы любые клиенты в любой момент могли отключаться и подключаться к серверу, поэтому такой мудренный код сервера, но, при запуске сервера и клиента, клиент подключается к серверу и не получает Connected от сервера, предположений в чем проблема очень мало, скорее всего в модуле threading или в моей невнимательности, за любую помощь большое спасибо. Код:
Сервера:
import socket
from threading import Thread
import json
def pass_check(list_id: list) -> int:
last_number = 0
for i in list_id:
if i == 0:
continue
if i-1 != last_number:
break
last_number = i
return last_number
IP = "192.168.43.228"
PORT = 10010
class Client:
def __init__(self):
self.dict_client = {}
def add_client(self, id: int, conn, addr: tuple, nick:str):
self.dict_client[id] = {"conn": conn, "addr": addr, "nick": nick}
dict_thread[id] = Thread(target=listen_packet(conn, addr))
dict_thread[id].start()
print(self.dict_client)
def delete_client(self, addr):
self.dict_client.pop(addr)
client = Client()
def listen_client():
while True:
sock.listen(1)
conn, addr = sock.accept()
nick = conn.recv(64).decode("utf-8")
client.add_client(pass_check(list(client.dict_client.keys())), conn, addr, nick)
conn.send("Connected".encode("utf-8"))
def listen_packet(conn, addr):
while True:
packet = conn.recv(256)
for id in client.dict_client:
if client.dict_client["id"]["addr"] != addr:
client.dict_client[id]["conn"].send(packet)
dict_thread = {}
sock = socket.socket()
sock.bind((IP, PORT))
thread_listen_client = Thread(target=listen_client())
thread_listen_client.start()
Клиент:
import socket
import json
from random import randint
sock = socket.socket()
sock.connect(("192.168.43.228", 10010))
sock.send("It's my nick!".encode("utf-8"))
print("отправил ник и жду ответа")
data = sock.recv(64)
print(data.decode("utf-8"))
if data.decode("utf-8") == "Connected":
while True:
packet = [ [randint(10000000, 50000000)/1.0,
randint(10000000, 50000000)/1.0,
randint(10000000, 50000000)/1.0],
[randint(-10000000, 10000000)/1.0, randint(-10000000, 10000000)/1.0],
randint(10000, 500000)/1.0 ]
sock.send(json.dumps(packet).encode('utf-8'))
data = sock.recv(256)
print(json.loads(data, encoding='utf-8'))