コード例 #1
0
ファイル: Sender.py プロジェクト: JakubKalina/NIDUC
    def send_frame_stop_and_wait(self):
        # test
        # print(self.image)
        self.tableOfFrames = Image.gruop_into_frames(self.image, self.size,
                                                     self.ChosenSumAlgorithm)

        #wyświetlenie tablicy zawierającej wszystkie ramki
        print(self.tableOfFrames)

        #zapis ilości ramek
        sizeoftable = len(self.tableOfFrames)

        #tworzy tablice o rozmiarze ilosci ramek z potwierdzeniami lub odrzuceniami pakietów
        for i in range(0, sizeoftable):
            self.ACK.append(False)

        #przenoszenie do receivera potrzebnych wartosci
        Receiver.numberOfValues = number
        Receiver.numberOfFrames = sizeoftable
        Receiver.reset_Data(Receiver)
        i = 0
        endOfWindow = self.windowSize - 1

        print("Rozmiar tablicy ramek:")
        print(sizeoftable)

        #wysyłanie poszczególnych ramek
        while i < sizeoftable:
            self.ACK[i] = self.receiver.receive_frame_stop_and_wait(
                self.tableOfFrames[i], i)
            if self.ACK[i]:
                i += 1
            else:
                self.ACK[i] = False
                continue
コード例 #2
0
ファイル: Sender.py プロジェクト: JakubKalina/NIDUC
    def send_frame_selective(self):
        #stworzenie tablicy z ramkami
        self.tableOfFrames = Image.gruop_into_frames(self.image, self.size,
                                                     self.ChosenSumAlgorithm)

        # zapisuje ilosc ramek dopedli wysylania
        sizeoftable = len(self.tableOfFrames)

        # tworzy tablice o rozmiarze ilosci ramek z potwierdzeniami lub odrzuceniami pakietów
        for i in range(0, sizeoftable):
            self.ACK.append(False)

        # przenoszenie do receivera potrzebnych wartosci
        Receiver.numberOfFrames = sizeoftable
        Receiver.reset_Data(Receiver)
        endOfWindow = self.windowSize - 1
        i = 0
        # petla wysylajaca ramki zgodnie z regulami algotrytmu selektywnego
        while i < sizeoftable:
            isCorrectFrame = True
            # petla operujaca oknem i wysylajaca te ramki ktore sender od nas chce
            for j in range(i, endOfWindow + 1):
                if j == sizeoftable:
                    break
                if self.ACK[j] == False:
                    # time.sleep(0.2)
                    print(f'SENDER: wysłano obiekt nr "{j}"')
                    self.ACK[j] = self.receiver.recieve_frame(
                        self.tableOfFrames[j], j)
                else:
                    pass
            # petla sprawdzajaca czy cala ramka zostala przeslana bez zarzutów
            for j in range(i, endOfWindow + 1):
                if j == sizeoftable:
                    break
                if self.ACK[j] == False:
                    isCorrectFrame = False
            # warunki odpowiadajace za przesuwanie sie okna gdy ramka jest dobra lub gdy ktorys z pakietow jest uszkodzony
            if isCorrectFrame:
                if (endOfWindow + self.windowSize) >= sizeoftable:
                    endOfWindow = sizeoftable
                else:
                    endOfWindow += self.windowSize
                i += self.windowSize
            else:
                count = 0
                for j in range(i, endOfWindow + 1):
                    if self.ACK[j] == True:
                        count += 1
                    else:
                        break
                endOfWindow += count
                i += count