Есть 2 скрипта. Сервер и клиент. Когда запускаю сначала клиента, потом сервер, то подключается через секунды 2-3(или вообще не подключается ), когда я перезапускаю сервер(когда клиент работает), то клиент не подключаеться, если и его не перезапустить.
Сервер:
import socket
import threading
server_ip = "192.168.0.108"
server_port = 12345
server_addr = (server_ip,server_port)
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(server_addr)
format = "utf-8"
class handle_client:
connected = False
def __init__(self,conn,addr):
self.conn = conn
self.addr = addr
self.connected = True
self.handle()
def execute_command(self,command):
if(type(command) == dict):
if(command["command"] == "disconnect"):
self.connected = False
print(f"[{self.addr}] disconnected from server!")
def handle(self):
while self.connected:
data = self.conn.recv(1024).decode(format)
command = eval(data)
print(f"[{self.addr}] sended command/message {command}")
self.execute_command(command)
self.conn.close()
server.listen()
while True:
conn, addr = server.accept()
threading.Thread(target=handle_client,args=(conn,addr),daemon=True).start()
print(f"[{addr}] connected to server!")
Клиент:
import socket
import threading
server_ip = "192.168.0.108"
server_port = 12345
server_addr = (server_ip,server_port)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.settimeout(0.4)
format = "utf-8"
def try_connect():
while True:
try:
client.connect(server_addr)
except Exception as e:
print(e)
threading.Thread(target=try_connect,daemon=True).start()
while True:
command = input()
if (command == "quit"):
data = {"command": "disconnect", "args": {}}
try:
client.send(str(data).encode(format))
except:
pass
exit()
& в PyCharm`е чтобы закрыть сервер нужно 2 раза жать на кнопку остановки.