Skip to content

Instantly share code, notes, and snippets.

@odds-get-evened
Created December 1, 2021 19:37
Show Gist options
  • Save odds-get-evened/b3f7c4331a1f1b64be15f051ebe3d958 to your computer and use it in GitHub Desktop.
Save odds-get-evened/b3f7c4331a1f1b64be15f051ebe3d958 to your computer and use it in GitHub Desktop.
client packed inside server
import socket
import threading
import time
class Client:
def __init__(self):
self.host = socket.gethostname()
self.port = 5000
self.client_socket = socket.socket()
self.init()
def init(self):
try:
self.client_socket.connect((self.host, self.port))
print("connected to sever @ " + self.host)
self.run()
except ConnectionRefusedError:
print('connection to server refused')
finally:
self.client_socket.close()
def run(self):
message = input("> ")
while message.lower().strip() != "bye":
self.client_socket.send(message.encode()) # send a message to the server
print("sending `%s` to the server" % str(message))
data = self.client_socket.recv(1024).decode() # receive a response from the server
print("received from the server: " + data.upper().strip())
message = input("> ")
self.client_socket.close()
class Server:
def __init__(self):
self.host = socket.gethostname()
self.port = 5000
self.server_socket = socket.socket()
self.init()
def init(self):
self.server_socket.bind((self.host, self.port))
"""
TODO allow service to discover a max of concurrent nodes
for now, hard set to 10
"""
self.server_socket.listen(10)
self.run()
def run(self):
conn, address = self.server_socket.accept() # accept a new connection
# print("connection from " + str(address))
while True:
# receive a data stream. only accepting packets of 1024 bytes
data = conn.recv(1024).decode()
if not data:
break
# print("from the connected client: " + str(data))
conn.send(data.encode()) # send a response beck to client
conn.close()
self.server_socket.close()
class Node:
server: Server = None
client: Client = None
def __init__(self):
self.t1 = threading.Thread(target=self.server_thread, name="server")
self.t2 = threading.Thread(target=self.client_thread, name="client")
self.t1.start()
time.sleep(2)
print("started...")
self.t2.start()
print("running.")
def client_thread(self):
self.client = Client()
def server_thread(self):
self.server = Server()
def startup():
node = Node()
if __name__ == '__main__':
startup()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment