Feat: UDP server client skeleton
This commit is contained in:
parent
af467bfd41
commit
73d2ec7a59
64
src/myftp/udp/udp_client.py
Normal file
64
src/myftp/udp/udp_client.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
from socket import socket, AF_INET, SOCK_DGRAM
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
|
||||||
|
class UDPClient:
|
||||||
|
def __init__(self, server_name: str, server_port: int, debug: bool):
|
||||||
|
self.server_name = server_name
|
||||||
|
self.server_port = server_port
|
||||||
|
self.debug = debug
|
||||||
|
|
||||||
|
print(f"New UDP connection created to server at {server_name}:{server_port}")
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
client_socket = socket(AF_INET, SOCK_DGRAM)
|
||||||
|
|
||||||
|
try:
|
||||||
|
client_socket.connect((self.server_name, self.server_port))
|
||||||
|
except Exception:
|
||||||
|
print(
|
||||||
|
f"Error with the server IP address {self.server_name} or with the server port number {self.server_port}"
|
||||||
|
)
|
||||||
|
|
||||||
|
message = input("input lowercase sentence: ")
|
||||||
|
|
||||||
|
client_socket.send(message.encode())
|
||||||
|
|
||||||
|
modified_message = client_socket.recv(2048)
|
||||||
|
|
||||||
|
print(modified_message.decode())
|
||||||
|
|
||||||
|
client_socket.close()
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
parser = ArgumentParser(description="A FTP server written in Python. UDP version")
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"server_name",
|
||||||
|
type=str,
|
||||||
|
default="127.0.0.1",
|
||||||
|
help="IP address or hostname for the server. Default = localhost",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"port_number", type=int, help="Port number for the server. Default = 12000"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--debug",
|
||||||
|
type=int,
|
||||||
|
choices=[0, 1],
|
||||||
|
default=0,
|
||||||
|
help="Enable or disable the flag (0 or 1)",
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
udp_server = UDPClient(args.server_name, args.port_number, args.debug)
|
||||||
|
|
||||||
|
udp_server.run()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
init()
|
65
src/myftp/udp/udp_server.py
Normal file
65
src/myftp/udp/udp_server.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
from socket import socket, AF_INET, SOCK_DGRAM
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
|
||||||
|
class UDPServer:
|
||||||
|
def __init__(self, server_name: str, server_port: int, debug: bool) -> None:
|
||||||
|
self.server_name = server_name
|
||||||
|
self.server_port = server_port
|
||||||
|
self.debug = debug
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.server_socket = socket(AF_INET, SOCK_DGRAM)
|
||||||
|
self.server_socket.bind((self.server_name, self.server_port))
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"server is ready to receive at {self.server_name}:{self.server_port}"
|
||||||
|
) if self.debug else None
|
||||||
|
|
||||||
|
shut_down = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
while not shut_down:
|
||||||
|
message, clientAddress = self.server_socket.recvfrom(2048)
|
||||||
|
message_in_utf8 = message.decode()
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"received message from client at {clientAddress}: {message_in_utf8}"
|
||||||
|
) if self.debug else None
|
||||||
|
|
||||||
|
modified_message = message_in_utf8.upper()
|
||||||
|
self.server_socket.sendto(modified_message.encode(), clientAddress)
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
shut_down = True
|
||||||
|
self.server_socket.close()
|
||||||
|
print("Server shutting down\n")
|
||||||
|
|
||||||
|
finally:
|
||||||
|
print("Closed the server socket\n")
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
parser = ArgumentParser(description="A FTP server written in Python. UDP version")
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"port_number", type=int, help="Port number for the server. Default = 12000"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--debug",
|
||||||
|
type=int,
|
||||||
|
choices=[0, 1],
|
||||||
|
default=0,
|
||||||
|
help="Enable or disable the flag (0 or 1)",
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
udp_server = UDPServer("127.0.0.1", args.port_number, args.debug)
|
||||||
|
|
||||||
|
udp_server.run()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
init()
|
Loading…
x
Reference in New Issue
Block a user