国产探花免费观看_亚洲丰满少妇自慰呻吟_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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长汀县| 荣昌县| 东辽县| 昭苏县| 洛南县| 黑水县| 泰安市| 荆门市| 永济市| 石嘴山市| 平凉市| 瓮安县| 连南| 裕民县| 宜阳县| 尤溪县| 凤冈县| 松溪县| 龙江县| 蓝田县| 宜君县| 和林格尔县| 阿图什市| 乐亭县| 醴陵市| 南城县| 电白县| 阿合奇县| 桃园县| 囊谦县| 油尖旺区| 芦山县| 凤翔县| 庆元县| 芮城县| 绥棱县| 昆明市| 荔浦县| 聂拉木县| SHOW| 宽城|