Beispiel #1
0
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