The original multithreading setup (where Connection handled all the threads), was massively inneficient, so I replaced it with a new setup which uses much less power. Sadly, this means the server and client must both have separate threads for sending and recieving (and accepting for the server). Also, because of the transition to the new setup, the server once again crashes when users disconnect, and does not keep a log. These features will be fixed soon. To start the server, run acceptor.py, and to start the client. run ClientMain.py.