diff --git a/client.py b/client.py index 4be6e27a27c6bee02a2eceaaeb79b7511c399a08..bd00aa2e1a03463cab472d222bbff84fab410010 100644 --- a/client.py +++ b/client.py @@ -2,6 +2,7 @@ import socket import sys from common import * from buffer import FileBuffer +import time class Client(): @@ -110,7 +111,9 @@ class Client(): seg.setACK() self.send(seg.to_bytes(), self.DST_ADDR) log(f"Segment SEQ={rcvd.get_seq_no()}, FIN", "Received, Ack sent") - + + time.sleep(0.1) + seg = Segment(seg.get_seq_no()) seg.setFIN() self.send(seg.to_bytes(), self.DST_ADDR) @@ -127,23 +130,22 @@ class Client(): break elif not rcvd.test_checksum() or rcvd.get_seq_no() > base: - refuse_segment = Segment() - refuse_segment.set_seq_no(0) - refuse_segment.set_ack_no(base) - refuse_segment.setSYN() - self.send(refuse_segment.to_bytes(), server_addr) + # refuse_segment = Segment() + # refuse_segment.set_seq_no(0) + # refuse_segment.set_ack_no(base) + # refuse_segment.setSYN() + # self.send(refuse_segment.to_bytes(), server_addr) log("!", f"WARNING!!! Segment refused") elif rcvd.get_seq_no() < base: - ack_segment = Segment() - ack_segment.set_seq_no(0) - ack_segment.set_ack_no(base) - ack_segment.getACK() - self.send(ack_segment.to_bytes(), server_addr) + # ack_segment = Segment() + # ack_segment.set_seq_no(0) + # ack_segment.set_ack_no(base) + # ack_segment.getACK() + # self.send(ack_segment.to_bytes(), server_addr) log("!", f"WARNING!!! Segment already received") - break # ini mau void apa mau return data_ret yakk wkwkkwkwkwkwk return diff --git a/server.py b/server.py index f33a0b47d4fd5126a40d4b56bdcc080194ea56c4..eb4b6c20d2c708366f90f6fd718126e164aee9a6 100644 --- a/server.py +++ b/server.py @@ -11,7 +11,7 @@ class Server(): self.SERVER_PORT = port self.FILE_PATH = filepath self.clients = [] - self.N = 1 + self.N = 4 self.init_socket() self.listen() @@ -95,6 +95,8 @@ class Server(): count = len(list_of_segments) log("!", f"File segmented into {count} segments") + acked = [False for _ in range(count)] + base = 0 timeout = 0 while True: @@ -107,12 +109,17 @@ class Server(): self.send(seg.to_bytes(), client_addr) log(f"Segment SEQ={seg.get_seq_no()}", "Sent") try: - byte, _ = self.recv() - rcvd = Segment().from_bytes(byte) - if rcvd.test_checksum() and rcvd.get_ack_no() == base: - print(list_of_segments[base].bytes[12:22]) - log(f"Segment SEQ={rcvd.get_seq_no()}", "Acked") - base += 1 + listen = self.N + if base + listen >= count: + listen = count-base + for i in range(listen): + if (base+i) < count: + byte, _ = self.recv() + rcvd = Segment().from_bytes(byte) + if rcvd.test_checksum() and rcvd.get_ack_no() == base: + print(list_of_segments[base].bytes[12:22]) + log(f"Segment SEQ={rcvd.get_ack_no()}", "Acked") + base += 1 if base >= count: break timeout = 0