예제 #1
0
 def send(self):
     self.handler.run()
     # are loc starea de initializare(este transmis pachetul SYN si se asteapta ack-ul pentru acesta).
     self.send_syn_pack()
     self.wait_for_syn_pack()
     while True:
         # un nou pachet este creat doar daca nr. de pachete aflate in tranzit este mai mic decat dim. ferestrei
         if self.pack_in_transit < self.cwnd:
             data = self.rf.read(self.widgets.pack_size.get()-16)
             # nu s-a ajuns la finalul fisierului, asadar un nou pachet este creat si transmis clasei handler
             if len(data) != 0:
                 pack = self.create_pack(data)
                 self.handler.add_package(pack)
                 self.inc_pack_in_transit()
             # s-a ajuns la finalul fisierului prin urmare trebuie transmis pachetul FIN pentru incheierea conexiunii.
             else:
                 pack = Package()
                 pack.set_flag(1)
                 pack.set_num(self.pack_cnt)
                 self.message_box.insert_message("FIN pack has been sent.")
                 self.handler.add_package(pack)
                 # salvam momentul trimiterii pachetului FIN
                 self.timer = int(round(time.time() * 1000))
                 self.rf.close()
                 break
         time.sleep(0.001)
예제 #2
0
 def get_ack_for_syn_pack(self, dim):
     ack_pack = Package()
     ack_pack.set_flag(0)
     ack_pack.set_num(self.pack_cnt)
     self.inc_cnt()
     ack_pack.set_ack(dim)
     return ack_pack
예제 #3
0
 def handle_fin_pack(self, address):
     self.wf.close()
     self.message_box.insert_message("FIN pack has been received.")
     ack_pack = Package()
     ack_pack.set_flag(1)
     ack_pack.set_num(self.pack_cnt)
     self.sock.sendto(ack_pack.get_data(), address)
     self.message_box.insert_message("FIN pack has been sent.")
     self.message_box.insert_message("File " + self.file_name +
                                     " has been received successfully.")
     self.sock.close()
예제 #4
0
 def send_syn_pack(self):
     self.widgets.connection_is_active = True
     syn_pack = Package()
     syn_pack.set_flag(0)
     file_size = os.path.getsize(file_path)
     total_pack_num = int(math.ceil(file_size/(self.widgets.pack_size.get()-16)))
     file_path_encoded = (file_path+"/"
                          +str(total_pack_num)+"/"
                          +str(self.widgets.pack_size.get())+"/"
                          +str(self.widgets.lost_percentage.get())).encode()
     syn_pack.set_num(self.pack_cnt)
     self.inc_cnt()
     syn_pack.add_data(file_path_encoded)
     syn_pack.set_dim(len(file_path_encoded))
     self.handler.add_package(syn_pack)
     self.message_box.insert_message("SYN package has been sent.")