From 9f006d43bc25479631272310f99431136f46704e Mon Sep 17 00:00:00 2001
From: mgstabrani <mgstabrani19@gmail.com>
Date: Thu, 25 Nov 2021 22:34:50 +0700
Subject: [PATCH] Change window

---
 client.py | 26 ++++++++++++++------------
 server.py | 21 ++++++++++++++-------
 2 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/client.py b/client.py
index 4be6e27..bd00aa2 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 f33a0b4..eb4b6c2 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
-- 
GitLab