Assignment03s.py
user_9560538
python
a year ago
2.7 kB
10
Indexable
# CSCI 355 Web Technology #Summer 2024 #Assignment 3: “Socket Programming II with Multi-Threading” #ACK - Class import socket import threading import time #[3] Define these constants used for the 3-way handshake: SYN = 'SYN' ACK = 'ACK' ACKSYN = 'ACK+SYN' FIN = 'FIN' ACKFIN = 'ACK+FIN' # [4] Define a function to handle resending the file after a certain amount of elapsed time: def send_again_check(c, addr, has_received, msg): old_time = time.time() while not has_received[0]: if time.time() - old_time >= 10: c.send(msg.encode()) print(str(addr) + ' Sending again : ' + msg) break # [5] Define a function to handle each client connection def each_connection(c, addr): print(str(addr) + ' Connected') is_finishing = False has_received = [False] while True: msg_recv = c.recv(2048).decode() has_received[0] = True if msg_recv == SYN: print(str(addr) + ' Received : ' + msg_recv) msg_send = ACKSYN c.send(msg_send.encode()) print(str(addr) + ' Sending : ' + msg_send) elif msg_recv.startswith(ACK) and not is_finishing: print(str(addr) + ' Received : ' + msg_recv) file_name = msg_recv[3:] if len(file_name) > 0: f = open(file_name, 'r') file_content = f.read() f.close() print(str(addr) + ' File contents read') c.send(file_content.encode()) print(str(addr) + ' Sending : ' + file_content) has_received[0] = False threading.Thread(target=send_again_check, args=(c, addr, has_received, file_content,)).start() elif msg_recv == FIN: print(str(addr) + ' Received : ' + msg_recv) msg_send = ACKFIN c.send(msg_send.encode()) print(str(addr) + ' Sending : ' + msg_send) is_finishing = True elif msg_recv == ACK and is_finishing: break else: break c.close() print(str(addr) + ' Connection closed') #[6] Create a function main to manage the overall server activity def main(): s = socket.socket() print("Socket successfully created") port = 12345 s.bind(('', port)) print("socket binded to %s" % (port)) s.listen(5) print("socket is listening") while True: c, addr = s.accept() threading.Thread(target=each_connection, args=(c, addr,)).start() s.close() if __name__ == "__main__": main()
Editor is loading...
Leave a Comment