示例#1
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:
                    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
示例#2
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
示例#3
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)
示例#5
0
        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()
示例#6
0
 def starttimer(self, count_time: int):
     timethread = runScriptThread(self.timerfunc, count_time,
                                  self.timechecker)
     timethread.start()
     self.timethread = timethread