From 0f1ae9404611071bde242ba3e207d03e90023c72 Mon Sep 17 00:00:00 2001 From: Faris Hasim <farishasimsyauqi@gmail.com> Date: Mon, 22 Nov 2021 08:37:26 +0700 Subject: [PATCH] restructure client --- client.py | 71 ++++++++++++++++++++++++++++++++++++++++--------------- server.py | 22 +++++++++++++---- 2 files changed, 69 insertions(+), 24 deletions(-) diff --git a/client.py b/client.py index a9fe740..a3698e6 100644 --- a/client.py +++ b/client.py @@ -2,26 +2,59 @@ import socket import sys from common import * +class Client(): -s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -if len(sys.argv) > 1: - try : - s.bind((HOST_ADDRESS, int(sys.argv[1]))) - except TypeError: - pass - except OSError: - log("!", "Port already used, continue using random port") - pass + def __init__(self, port=10001, filepath="out"): + self.PORT = port + self.FILEPATH = filepath + + self.init_socket() + self.broadcast() + self.handshake() + self.recv_file() + self.close_con() + + def init_socket(self): + self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try : + if self.PORT == BROADCAST_PORT: + raise ValueError + self.socket.bind((HOST_ADDRESS, self.PORT)) + except : + log("!", "Error when assigning port, continue using random port") + pass + + def send(self, data, dst_addr): + self.socket.sendto(data, dst_addr) -log("!", "Request sent to broadcast address") -s.sendto(bytes("Hello, client here looking for server", "utf-8"), (HOST_NAME, BROADCAST_PORT)) + def recv(self): + return self.socket.recvfrom(SEG_SIZE) -full_msg = "" -while True: - msg, address = s.recvfrom(SEG_SIZE) - log("SERVER", msg.decode("utf-8")) - if len(msg) <= 0: - break - msg.decode("utf-8") + def broadcast(self): + self.send(bytes(), (HOST_ADDRESS, BROADCAST_PORT)) + log("!", "Message sent to broadcast address") + + data, address = self.recv() + log("!", data) + log("!", f"Server address : {address}") -print(full_msg) + def handshake(self): + # To-Do + return + + def recv_file(self): + # To-Do + return + + def close_con(self): + # To-Do + return + +if __name__=="__main__": + try: + port=int(sys.argv[1]) + Client(port=port) + except KeyboardInterrupt: + pass + except : + Client() \ No newline at end of file diff --git a/server.py b/server.py index e1a5cd7..8746336 100644 --- a/server.py +++ b/server.py @@ -18,21 +18,26 @@ class Server(): for client in self.clients : self.handshake(client) self.send_file(client) + self.close_con(client) def init_socket(self): self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + def send(self, data, client_addr): + self.socket.sendto(data, client_addr) + + def recv(self): + return self.socket.recvfrom(SEG_SIZE) + def listen(self): self.socket.bind((HOST_NAME, BROADCAST_PORT)) log("!", f"Server listening on broadcast address\n") while True: - message, address = s.recvfrom(SEG_SIZE) + message, address = self.recv() log("!", f"Client {address} found") - # log("CLIENT", message.decode("utf-8")+"\n") - # msg = f"Hello client, server here on {HOST_ADDRESS}:{SERVER_PORT}" - # s.sendto(bytes(msg, "utf-8"), address) + self.send(bytes(), address) # <-- To-change self.clients.append(address) log("?", "Listen more? (y/n) ", end="") @@ -48,5 +53,12 @@ class Server(): # To-Do return + def close_con(self, client_addr): + # To-Do + return + if __name__=="__main__": - Server(port=sys.argv[1]); \ No newline at end of file + try: + Server(port=sys.argv[1]); + except: + Server(); \ No newline at end of file -- GitLab