diff --git a/client.py b/client.py
index a9fe740693d3a2c543bffb2806bd5dd0dc3596f7..a3698e65c6be2928d324c5e86ee876636027753d 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 e1a5cd76a7a51b3a37c66e2a9f1a63e838fbfcc1..8746336a34f4fff1cc1d2b0455b9ace0d0752683 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