From 9cad0957cfe1759bae2e12df0f131eb6efca1de6 Mon Sep 17 00:00:00 2001 From: "Lentz, Rick" <rick.w.lentz.civ@mail.mil> Date: Fri, 13 Aug 2021 13:52:54 -0700 Subject: [PATCH] Upload New File --- .../homework1/Lentz_Python/client.py | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 MV3500Cohort2021JulySeptember/homework1/Lentz_Python/client.py diff --git a/MV3500Cohort2021JulySeptember/homework1/Lentz_Python/client.py b/MV3500Cohort2021JulySeptember/homework1/Lentz_Python/client.py new file mode 100644 index 0000000000..3bf853c410 --- /dev/null +++ b/MV3500Cohort2021JulySeptember/homework1/Lentz_Python/client.py @@ -0,0 +1,80 @@ +#Adapted from https://github.com/realpython/materials/blob/master/multiconn-client.py +import sys +import socket +import selectors +import types +import contextlib +import os + +with contextlib.suppress(FileNotFoundError): + os.remove('screenshot.png') + +sel = selectors.DefaultSelector() + +def start_connections(host, port, x3d_id): + server_addr = (host, port) + print("starting connection to", server_addr) + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.setblocking(False) + sock.connect_ex(server_addr) + events = selectors.EVENT_READ | selectors.EVENT_WRITE + data = types.SimpleNamespace( + connid=1, + msg_total=sum([1]), + recv_total=0, + messages=[str(x3d_id).encode()], + outb=b"", + ) + sel.register(sock, events, data=data) + + +def service_connection(key, mask): + sock = key.fileobj + data = key.data + if mask & selectors.EVENT_READ: + recv_data = sock.recv(1024) # Should be ready to read + sock.settimeout(None) + if not recv_data: + print("closing connection", data.connid) + sel.unregister(sock) + sock.close() + if recv_data: + with open('screenshot.png','ab') as b: + b.write(recv_data) + data.recv_total += len(recv_data) + print("received " + str(data.recv_total) + " image bytes from connection", data.connid) + + + + + if mask & selectors.EVENT_WRITE: + if not data.outb and data.messages: + data.outb = data.messages.pop(0) + if data.outb: + print("sending", repr(data.outb), "to connection", data.connid) + sent = sock.send(data.outb) # Should be ready to write + data.outb = data.outb[sent:] + + +if len(sys.argv) != 4: + print("This program simulates the agent communicate process where a client requests a dynamically rendered X3D asset from the host.") + print("usage:", sys.argv[0], "<host 192.168.86.225> <port 65500> <x3d asset number [0-14138] >") + sys.exit(1) + +host, port, x3d_id = sys.argv[1:4] +start_connections(host, int(port), int(x3d_id)) + +try: + while True: + events = sel.select(timeout=1) + if events: + for key, mask in events: + service_connection(key, mask) + # Check for a socket being monitored to continue. + if not sel.get_map(): + break +except KeyboardInterrupt: + print("caught keyboard interrupt, exiting") +finally: + sel.close() +sel.close() \ No newline at end of file -- GitLab