Created
December 1, 2021 19:37
-
-
Save odds-get-evened/b3f7c4331a1f1b64be15f051ebe3d958 to your computer and use it in GitHub Desktop.
client packed inside server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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