国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python:socket傳輸大文件示例

2020-02-23 04:17:56
字體:
來源:轉載
供稿:網友

文件可以傳輸,但是對比傳輸前后的文件:socket_test.txt,末尾有一些不一致服務端代碼:

#!/usr/bin/python# -*- coding: utf-8 -*-import sysreload(sys)sys.setdefaultencoding("utf-8")import time'''等待連接等待發送文件讀取數據寫入文件并且保存等待連接'''import socketimport threadingimport timeimport structdef function(newsock, address):  FILEINFO_SIZE = struct.calcsize('128sI')  '''定義文件信息(包含文件名和文件大小)大小。128s代表128個char[](文件名),I代表一個integer or long(文件大小)'''  while 1:    try:      fhead = newsock.recv(FILEINFO_SIZE)      filename, filesize = struct.unpack('128sI', fhead)      '''把接收到的數據庫進行解包,按照打包規則128sI'''      print "address is: ", address      print filename, len(filename), type(filename)      print filesize      #filename = 'new_'+filename.strip('/00') # 命名新文件new_傳送的文件      filename = filename.strip('/00')      fp = open(filename, 'wb') # 新建文件,并且準備寫入      restsize = filesize      print "recving..."      while 1:        if restsize > 102400: # 如果剩余數據包大于1024,就去1024的數據包          filedata = newsock.recv(10240)        else:          filedata = newsock.recv(restsize)          fp.write(filedata)          #break        if not filedata:          break        fp.write(filedata)        restsize = restsize - len(filedata) # 計算剩余數據包大小        if restsize <= 0:          break      fp.close()      print "recv succeeded !!File named:", filename    except Exception, e:      print unicode(e).encode('gbk')      print "the socket partner maybe closed"      newsock.close()      breaksock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創建tcp連接sock.bind(('10.240.146.82', 8887)) # 定于端口和ipsock.listen(5) # 監聽while True:  newsock, address = sock.accept()  print "accept another connection"  tmpThread = threading.Thread(target=function, args=(newsock, address)) # 如果接收到文件,創建線程  tmpThread.start() # 執行線程print 'end'

客戶端代碼:

#!/usr/bin/python# -*- coding: utf-8 -*-import sysreload(sys)sys.setdefaultencoding("utf-8")'''輸入文件名,并且上傳'''import socketimport timeimport structimport osf = open('socket_test.txt', 'wb')for i in range(1000000):  f.write('for socket test, the line number is : ' + str(i) + '/n')f.close()sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(50)e = 0try:  sock.connect(('10.240.146.82', 8887))  print 'connect...'except socket.timeout, e:  print 'timeout', eexcept socket.error, e:  print 'error', eexcept e:  print 'any', eif not e:  #while (1):    #filename = raw_input('input your filename------->') # 輸入文件名  filename = 'socket_test.txt'  FILEINFO_SIZE = struct.calcsize('128sI') # 編碼格式大小  fhead = struct.pack('128sI', filename, os.stat(filename).st_size) # 按照規則進行打包  sock.send(fhead) # 發送文件基本信息數據  fp = open(filename, 'rb')  fp2 = open('local_test.txt','wb')  i = 0  while 1: # 發送文件    filedata = fp.read(10240)    if not filedata:      break    sock.sendall(filedata)    fp2.write(filedata)    print i    i = i + 1  print "sending over..."  fp.close()  fp2.close()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日照市| 本溪市| 祥云县| 新干县| 莆田市| 姚安县| 抚远县| 新竹县| 神池县| 濮阳县| 松桃| 长岭县| 关岭| 凤翔县| 焦作市| 赤峰市| 南充市| 庆云县| 鹤山市| 股票| 翁牛特旗| 衡阳市| 曲沃县| 含山县| 桂阳县| 荔浦县| 桂林市| 莱阳市| 岱山县| 蓬莱市| 涿州市| 丰原市| 日土县| 山东省| 连南| 红安县| 额尔古纳市| 乐陵市| 阜南县| 金山区| 杭锦旗|