python實現UDP協議下的檔案傳輸
阿新 • • 發佈:2020-03-23
本文例項為大家分享了python實現UDP檔案傳輸的具體程式碼,供大家參考,具體內容如下
UDP協議下檔案傳輸:
服務端
import socket count = 0 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server_addr = ('127.0.0.1',9999) s.bind(server_addr) print('Bind UDP on 9999...') while True: if count == 0: data,client_addr = s.recvfrom(1024) print('connected from %s:%s'%client_addr) f = open(data,'wb') data,client_addr = s.recvfrom(1024) if str(data) != "b'end'": f.write(data) print('recieved '+str(count)+' byte') else: break s.sendto('ok'.encode('utf-8'),client_addr) count+=1 print('recercled'+str(count)) f.close() s.close() # data,addr = s.recvfrom(1024) # print('Received from %s:%s' %addr) # s.sendto(b'Hello,%s!' %data,addr)
客戶端
import socket import os import time def Get_FilePath_FileName_FileExt(filename): filepath,tempfilename = os.path.split(filename) shotname,extension = os.path.splitext(tempfilename) return filepath,shotname,extension s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) filename = input('please enter the filename you want to send:\n') filepath,extension = Get_FilePath_FileName_FileExt(filename) client_addr = ('127.0.0.1',9999) f = open(filename,'rb') count = 0 flag = 1 while True: if count == 0: data = bytes(shotname+extension,encoding = "utf8") start = time.time() s.sendto(data,client_addr) data = f.read(1024) if str(data) != "b''": s.sendto(data,client_addr) print(str(count)+'byte') else: s.sendto('end'.encode('utf-8'),client_addr) break data,server_addr = s.recvfrom(1024) count+=1 print('recircled'+str(count)) s.close end = time.time() print('cost'+str(round(end-start,2))+'s') # for data in [b'Michael',b'Tracy',b'Sarah']: # s.sendto(data,('127.0.0.1',9999)) # print(s.recv(1024).decode('utf-8')) # s.close()
此次試驗為100000Byte大小的檔案,執行後檢視伺服器端資訊:
客戶端上檢視傳輸時延:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。