python實現TCP文件傳輸
前幾天已經講過了UDP協議下大文件傳輸的python實現代碼,今天再實現TCP協議下大文件傳輸的python實現代碼。TCP和UDP的實現過程還是比較不一樣的。
實現代碼:
服務端:
import socketimport times = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind((’127.0.0.1’,9999))s.listen(5)print(’Waiting for connection...’)while True: sock,addr = s.accept() print(’Accept new connection from %s:%s...’ % addr) if count == 0: data1 = sock.recv(1024) print(str(data1)) file_total_size = int(data1.decode()) received_size = 0 sock.send(’received’.encode()) data = sock.recv(1024) filepath = str(data.decode()) f = open(filepath, ’wb’) while received_size < file_total_size: data = sock.recv(1024) f.write(data) received_size += len(data) print(’已接收 ’,received_size,’ Byte’) data = sock.recv(1024) if data == b’end’: break f.close()s.close()
客戶端:
import socketimport osimport timefilename = input(’please enter the filename you want to send:n’)filesize = str(os.path.getsize(filename))fname1, fname2 = os.path.split(filename)client_addr = (’127.0.0.1’,9999)f = open(filename,’rb’)count = 0flag = 1s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#建立連接:s.connect((’127.0.0.1’, 9999))while True: if count == 0: s.send(filesize.encode()) start = time.time() s.recv(1024) s.send(fname2.encode()) for line in f: s.send(line) print(’sending...’) s.send(b’end’) breaks.closeend = time.time()print(’cost’ + str(round(end - start, 2)) + ’s’)
運行截圖:
服務器端:
客戶端:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: