def send_thread(filename, server_address, progress, lock): stop = False clientSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) clientSocket.settimeout(1) counter = 0 retry_counter = 0 path = '{}/' + filename file_path = path.format(file.get_source_directory()) try: file_obj = File(file_path) except FileNotFoundError: print('\n\n<<< FILE NOT FOUND >>>\n') chunk_generator = file_obj.get_chunks_generator() num_of_chunk = file_obj.calculate_chunks_number() packet_class = Packet(counter) # Send file name clientSocket.sendto(filename.encode('utf-8').strip(), server_address) server_port = clientSocket.recv(2) receiver_port = int.from_bytes(server_port, byteorder='little') for chunk in chunk_generator: counter += 1 success = False if (counter == num_of_chunk): packet = packet_class.create_last_packet(chunk) else: packet = packet_class.create_packet(chunk) while not (success): if (retry_counter > 9): print("\n\nServer not responding") stop = True break try: clientSocket.sendto(packet, (server_address[0], receiver_port)) acknowledgement = int.from_bytes(clientSocket.recv(1024), byteorder='little') success = True retry_counter = 0 except: print('\n\n<<< RETRYING >>>', end='\r') retry_counter += 1 if (stop): break progress_percent = ceil(counter / num_of_chunk * 100.0) with lock: progress.value = progress_percent