https://medium.com/@AlexanderObregon/how-to-handle-networking-in-python-with-socket-programming-e07ac9e90c1f