Как заставить этот код работать на машине с windows10? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытался написать чат для локальной сети (то же самое с чатом, представленным в этом руководстве).И при выполнении кода произошли некоторые ошибки.Прежде всего, когда один из клиентов прекращает работу с комбинацией ctrl + c, командная строка этого клиента выдает это исключение

Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\Samsung-PC\AppData\Local\Programs\Python\Python35- 
32\lib\threading.py", line 914, in _bootstrap_inner
self.run()
File "C:\Users\Samsung-PC\AppData\Local\Programs\Python\Python35- 
32\lib\threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "chat.py", line 39, in send_message
self.s.send(bytes(input(""),'utf-8'))
EOFError

, и клиент по-прежнему работает без выхода из программы.Работа этого клиента прекращается только тогда, когда другой клиент подключается к серверу.Затем другая проблема заключается в том, что сервер падает с тем исключением, когда один из клиентов закрывает свою вдову с помощью чата.

   Exception in thread Thread-2:
   Traceback (most recent call last):
   File "C:\Users\Samsung-PC\AppData\Local\Programs\Python\Python35- 
   32\lib\threading.py", line 914, in _bootstrap_inner
   self.run()
   File "C:\Users\Samsung-PC\AppData\Local\Programs\Python\Python35- 
   32\lib\threading.py", line 862, in run
   self._target(*self._args, **self._kwargs)
   File "chat.py", line 14, in handler
   data=c.recv(1024)
   ConnectionResetError: [WinError 10054]

А вот код

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()

Как я могу изменить этокод, чтобы заставить его работать на Windows 10 без таких ошибок (или любых других ошибок))?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...