|
@@ -42,7 +42,7 @@ while(True):
|
|
|
break
|
|
|
packets.append(packet.create_packet(total_packets, string))
|
|
|
total_packets += 1
|
|
|
-
|
|
|
+
|
|
|
# make winsize not bigger than the file allows
|
|
|
winsize = min(winsize, total_packets)
|
|
|
|
|
@@ -64,7 +64,7 @@ def receiver():
|
|
|
lock.acquire()
|
|
|
# what type is this?
|
|
|
if (newpacket.type == 2): # EOT
|
|
|
- acklog.write(str(newpacket.seq_num + "\n"))
|
|
|
+ acklog.write(str(newpacket.seq_num) + "\n")
|
|
|
lock.release()
|
|
|
return
|
|
|
elif (newpacket.type == 1): # data
|
|
@@ -73,12 +73,13 @@ def receiver():
|
|
|
raise SystemExit
|
|
|
else: # ACK packet
|
|
|
acklog.write(str(newpacket.seq_num) + "\n")
|
|
|
- print("snum: ", newpacket.seq_num, "confirmed: ", confirmed)
|
|
|
- if (newpacket.seq_num > confirmed): # new ACK
|
|
|
- confirmed = seq_num + 1
|
|
|
+ if (newpacket.seq_num >= confirmed): # new ACK
|
|
|
+ confirmed = newpacket.seq_num + 1
|
|
|
waking = True
|
|
|
cv.notify_all()
|
|
|
|
|
|
+ lock.release()
|
|
|
+
|
|
|
|
|
|
|
|
|
recthread = threading.Thread(target=receiver, args=())
|
|
@@ -97,7 +98,7 @@ while (confirmed < total_packets):
|
|
|
|
|
|
# use cv to sleep for 0.2s, or if woken up
|
|
|
cv.wait(tmout) # we get lock back when this returns
|
|
|
-
|
|
|
+
|
|
|
# check if we woke from timer or not (status of waking flag)
|
|
|
# this means we were woken by an ACK.
|
|
|
if (waking):
|