Задать вопрос
@Georgy123

Как можно исправить этот код,чтобы правильно работало на windows 10?

import socket 
import threading 
import sys

class Server:
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    connections = []
    def __init__(self):
        self.s.bind(('192.168.56.1',9090))
        self.s.listen(1)
    
    def handler(self,c,a):
        while True:
            data=c.recv(1024)
            for connection in self.connections:
                connection.send(data)
            if not data:
                self.connections.remove(c)
                c.close()
                print(str(a[0])+':'+str(a[1]),'disconnected')
                
                break

    def run(self):
        while True:
            c,a =self.s.accept()
            cThread=threading.Thread(target=self.handler,args=(c,a))
            cThread.daemon=True
            cThread.start()
            self.connections.append(c)
            print(str(a[0])+':'+str(a[1]),'connected')

class Client:
    
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    def send_message(self):
        while True:
            self.s.send(bytes(input(""),'utf-8'))

    def __init__(self,addr):
        self.s.connect((addr,9090))

        iThread=threading.Thread(target=self.send_message)
        iThread.daemon=True
        iThread.start()

        while True:
            data=self.s.recv(1024)
            if not data:
                break
            print(str(data,'utf-8'))



if (len(sys.argv) > 1):
    client=Client(sys.argv[1])
else:
    server=Server()
    server.run()

Как можно переписать/исправить этот код для винды,чтобы при отключении одного клиента сервер не падал? Как сделать адекватный выход через ctrl+c без зависаний и полотна с ошибкой? Заранее признателен
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SantaKlaud
клиенты и сервер на одной машине ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы