Код IT Загрузка примера кода…

Python main.py

import socket
import threading

class ChatServer:
    def __init__(self, host='127.0.0.1', port=5555):
        self.host = host
        self.port = port
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.clients = []
        self.nicknames = []

    def start(self):
        self.server_socket.bind((self.host, self.port))
        self.server_socket.listen()
        print(f"Сервер запущен на {self.host}:{self.port}")
        print("Ожидание подключений...")

        while True:
            client_socket, addr = self.server_socket.accept()
            print(f"Подключение от {addr}")

            client_socket.send("NICK".encode('utf-8'))
            nickname = client_socket.recv(1024).decode('utf-8')

            self.clients.append(client_socket)
            self.nicknames.append(nickname)

            print(f"Никнейм: {nickname}")
            self.broadcast(f"{nickname} присоединился к чату!".encode('utf-8'))
            client_socket.send("Подключён к серверу".encode('utf-8'))

            thread = threading.Thread(target=self.handle_client, args=(client_socket, nickname))
            thread.start()

    def broadcast(self, message):
        for client in self.clients:
            try:
                client.send(message)
            except OSError:
                pass

    def handle_client(self, client_socket, nickname):
        while True:
            try:
                message = client_socket.recv(1024).decode('utf-8')
                if message:
                    print(f"{nickname}: {message}")
                    self.broadcast(f"{nickname}: {message}".encode('utf-8'))
                else:
                    self.remove_client(client_socket, nickname)
                    break
            except OSError:
                self.remove_client(client_socket, nickname)
                break

    def remove_client(self, client_socket, nickname):
        if client_socket in self.clients:
            index = self.clients.index(client_socket)
            self.clients.remove(client_socket)
            self.nicknames.remove(nickname)
            client_socket.close()
            self.broadcast(f"{nickname} покинул чат.".encode('utf-8'))
            print(f"{nickname} отключился")

if __name__ == "__main__":
    server = ChatServer()
    server.start()

import socket
import threading

class ChatServer:
    def __init__(self, host='127.0.0.1', port=5555):
        self.host = host
        self.port = port
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.clients = []
        self.nicknames = []

    def start(self):
        self.server_socket.bind((self.host, self.port))
        self.server_socket.listen()
        print(f"Сервер запущен на {self.host}:{self.port}")
        print("Ожидание подключений...")

        while True:
            client_socket, addr = self.server_socket.accept()
            print(f"Подключение от {addr}")

            client_socket.send("NICK".encode('utf-8'))
            nickname = client_socket.recv(1024).decode('utf-8')

            self.clients.append(client_socket)
            self.nicknames.append(nickname)

            print(f"Никнейм: {nickname}")
            self.broadcast(f"{nickname} присоединился к чату!".encode('utf-8'))
            client_socket.send("Подключён к серверу".encode('utf-8'))

            thread = threading.Thread(target=self.handle_client, args=(client_socket, nickname))
            thread.start()

    def broadcast(self, message):
        for client in self.clients:
            try:
                client.send(message)
            except OSError:
                pass

    def handle_client(self, client_socket, nickname):
        while True:
            try:
                message = client_socket.recv(1024).decode('utf-8')
                if message:
                    print(f"{nickname}: {message}")
                    self.broadcast(f"{nickname}: {message}".encode('utf-8'))
                else:
                    self.remove_client(client_socket, nickname)
                    break
            except OSError:
                self.remove_client(client_socket, nickname)
                break

    def remove_client(self, client_socket, nickname):
        if client_socket in self.clients:
            index = self.clients.index(client_socket)
            self.clients.remove(client_socket)
            self.nicknames.remove(nickname)
            client_socket.close()
            self.broadcast(f"{nickname} покинул чат.".encode('utf-8'))
            print(f"{nickname} отключился")

if __name__ == "__main__":
    server = ChatServer()
    server.start()