Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import os, sys
- from time import sleep
- def transfer_progress(percent_done):
- if percent_done==100:
- output_text = f"\rTransfer Complete! (100% done) "
- else:
- output_text = f"\rTransfer in progress: {percent_done:.2f} %"
- sys.stdout.write(output_text)
- sys.stdout.flush()
- #sleep(0.15)
- def main(file_name, host, port):
- # Connect to the server
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.connect((host, port))
- print(f"Begin transfer of '{file_name}' to {host} : {port}")
- try:
- f = open(file_name, 'rb')
- except:
- raise Exception('Error reading the specified file!')
- size = os.path.getsize(file_name) # Get size of the file to be sent first.
- sock.send(file_name.encode()) # Send the name of the file to the server.
- response = int(sock.recv(1).decode()) # Get integer bit 0 or 1 as acknowledgement/response
- if response:
- total = 0
- percent = total / size
- # Initialise progress bar
- transfer_progress(percent)
- data = f.read(1024)
- # Send data
- while data:
- sock.send(data)
- total += 1024
- percent = total / size
- if percent > 1:
- percent = 1
- transfer_progress(percent * 100)
- data = f.read(1024)
- else:
- print("Error: Sending {} failed!".format(file_name))
- sock.close()
- if __name__ == "__main__":
- args = sys.argv
- if len(args) != 4:
- print('Argument Error: Program expects exactly 3 arguments: -file_name -hostname -portnumber')
- else:
- main(args[1], args[2], int(args[3]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement