From 1adf9b4632c092990edb1d41b32a5e178ac00247 Mon Sep 17 00:00:00 2001 From: "Casper V. Kristensen" Date: Sat, 15 Jun 2024 19:43:10 +0200 Subject: [PATCH] initial --- README.md | 8 ++++++++ client.py | 37 +++++++++++++++++++++++++++++++++++++ plot.py | 24 ++++++++++++++++++++++++ requirements.txt | 1 + server.py | 23 +++++++++++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 README.md create mode 100644 client.py create mode 100644 plot.py create mode 100644 requirements.txt create mode 100644 server.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..600eba3 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +```shell +# server +python server.py + +# client +python client.py | tee data.txt +python plot.py +``` diff --git a/client.py b/client.py new file mode 100644 index 0000000..3f27c76 --- /dev/null +++ b/client.py @@ -0,0 +1,37 @@ +import concurrent.futures +import itertools +import socket +import sys +from threading import Lock +from time import time + + +SERVER = "159.69.4.2" +PORT = 1337 +NUM_WORKERS = 100 + +start = time() +lock = Lock() +count = itertools.count() + + +def worker(): + while True: + try: + with lock: + i = next(count) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.connect((SERVER, PORT)) + data = str(i).encode("ascii") + sock.sendall(data) + response = sock.recv(1024) + print(int(response.decode("ascii")), float(time() - start)) + except KeyboardInterrupt: + break + except Exception as e: + print(e, file=sys.stderr) + + +with concurrent.futures.ThreadPoolExecutor(max_workers=NUM_WORKERS) as executor: + for _ in range(NUM_WORKERS): + executor.submit(worker) diff --git a/plot.py b/plot.py new file mode 100644 index 0000000..2c9f536 --- /dev/null +++ b/plot.py @@ -0,0 +1,24 @@ +import plotly.express as px + +ys = [] +xs = [] + +with open("data.txt") as file: + for line in file.readlines(): + print(line) + try: + y, x = map(float, line.split(" ")) + except Exception as e: + print(e) + ys.append(y) + xs.append(x) + +fig = px.scatter( + x=xs, + y=ys, + labels=dict( + x="connected at (s)", + y="connection number", + ), +) +fig.show() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ff0243c --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +plotly diff --git a/server.py b/server.py new file mode 100644 index 0000000..9a87928 --- /dev/null +++ b/server.py @@ -0,0 +1,23 @@ +import socketserver + + +PORT = 1337 + + +class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): + def handle(self): + """Echo""" + data = self.request.recv(1024) + print(data) + self.request.sendall(data) + + +class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): + pass + + +with ThreadedTCPServer(("0.0.0.0", PORT), ThreadedTCPRequestHandler) as server: + try: + server.serve_forever() + except KeyboardInterrupt: + server.shutdown()