def rdt_rcv_3(self, new_socket): queue = [] seq = 0 while True: print("Into the loop") rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() while True: # print("running,rcvpkt is what?") # print("The answer: ", rcvpkt) #print(rcvpkt) if not len(rcvpkt) == 0: rcvpkt = rcvpkt[0] if self.corrupt(rcvpkt): print("Corrupt!") unseq = 0 if seq == 1 else 1 sndpkt = self.make_pkt('ACK' + str(unseq), True, seq) self.udt_send(new_socket,sndpkt) rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() continue if self.notcorrupt(rcvpkt) and not int(rcvpkt.seqnum) == int(seq): print(rcvpkt.seqnum,'not',seq) print("Sequence number wrong!") unseq = 0 if seq == 1 else 1 sndpkt = self.make_pkt('ACK' + str(unseq), True, seq) self.udt_send(new_socket, sndpkt) rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() continue elif self.notcorrupt(rcvpkt) and int(rcvpkt.seqnum) == int(seq): print("Data Accepted") data = self.extract(rcvpkt) p = re.compile('--') xtmp = p.split(data) if len(xtmp) == 1: data,filename = xtmp[0] , 'test.txt' elif len(xtmp) == 2: data,filename = xtmp[0] , xtmp[1] else: print("Split Error") filename = 'err.txt' self.deliver_data(data,filename) global double if not double: sndpkt = self.make_pkt('ACK' + str(seq), True, seq) else: sndmsg = input('message:') sndpkt = self.make_pkt('ACK' + str(seq) + sndmsg, True, seq) self.udt_send(new_socket, sndpkt) break else: print("Unexpected error.") seq = 0 if seq == 1 else 0
def rdt_send_3(self, new_socket): queue = [] seq = 0 inputthread = runScriptThread(self.userinput, queue) inputthread.start() while True: while True: lock = threading.Lock() time.sleep(1) lock.acquire() if len(queue) != 0: lock.release() break lock.release() lock = threading.Lock() lock.acquire() data = queue[0] queue.remove(queue[0]) lock.release() sndpkt = self.make_pkt(data, True, seq) self.udt_send(new_socket, sndpkt) print("Start timer") atimer = timer() atimer.starttimer(3) rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() while True: print("iteration") if not len(rcvpkt) == 0: rcvpkt = rcvpkt[0] unseq = 0 if seq == 1 else 1 if self.corrupt(rcvpkt) or self.isack(rcvpkt, unseq): rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() continue else: break if atimer.isTimeOut(): self.udt_send(new_socket, sndpkt) atimer = timer() atimer.starttimer(10) continue print(rcvpkt) print(rcvpkt.data) if seq == 0: seq = 1 else: seq = 0
def rdt_rcv_3(self, new_socket): queue = [] seq = 0 while True: print("Into the loop") rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() while True: # print("running,rcvpkt is what?") # print("The answer: ", rcvpkt) print(rcvpkt) if not len(rcvpkt) == 0: print("Iter") rcvpkt = rcvpkt[0] if self.corrupt(rcvpkt): print("Corrupt!") unseq = 0 if seq == 1 else 1 sndpkt = self.make_pkt('ACK' + str(unseq), True, seq) self.udt_send(new_socket, sndpkt) rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() continue if self.notcorrupt(rcvpkt) and not int( rcvpkt.seqnum) == int(seq): print(rcvpkt.seqnum, 'not', seq) print("Sequence number wrong!") unseq = 0 if seq == 1 else 1 sndpkt = self.make_pkt('ACK' + str(unseq), True, seq) self.udt_send(new_socket, sndpkt) rcvpkt = [] rcvthread = runScriptThread(self.rdt_rcv, new_socket, rcvpkt) rcvthread.start() continue elif self.notcorrupt(rcvpkt) and int( rcvpkt.seqnum) == int(seq): print("Data Accepted") data = self.extract(rcvpkt) self.deliver_data(data, 'test.txt') sndpkt = self.make_pkt('ACK' + str(seq), True, seq) self.udt_send(new_socket, sndpkt) break else: print() seq = 0 if seq == 1 else 0
def GBN_send(self, newsocket, window_size=10): queue = EventQueue() window = Window(self, queue, 10) rcvthread = runScriptThread(self.recv_thread_fun, window) with open('a.txt', 'r') as f: filestring = f.read() messages = filestring.split('\n') while True: for msg in messages: success = False while not success: success = window.send(msg) time.sleep(1)
return True def recv(self, msg): if self.server.notcorrupt(msg): print("Receive ACK " + str(msg.seqnum) + ' successfully') self.base = int(msg.seqnum) + 1 if self.base == self.nextseqnum: self.timer.stoptimer() else: self.starttimer() def timeoutfun(self, window): base = window.base nextseqnum = window.nextseqnum window.starttimer() for i in range(base, nextseqnum): window.server.udt_send(window.server.new_socket, window.sndpkt[i]) time.sleep(1) isserver = True if isserver: server = MyServer('127.0.0.1', 10005) serverthread = runScriptThread(server.mainloop) serverthread.start() #serverthread.join() else: client = MyClient('127.0.0.1', 10006) clientthread = runScriptThread(client.mainloop) clientthread.start() #clientthread.join()
def starttimer(self, count_time: int): timethread = runScriptThread(self.timerfunc, count_time, self.timechecker) timethread.start() self.timethread = timethread