python:socket傳輸大文件示例
更新時間:2017年01月18日 10:47:14 作者:夏夜晚風(fēng)
本篇文章主要介紹了python:socket傳輸大文件示例,具有一定的參考價值,有興趣的可以了解一下,
文件可以傳輸,但是對比傳輸前后的文件:socket_test.txt,末尾有一些不一致服務(wù)端代碼:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") import time ''' 等待連接 等待發(fā)送文件 讀取數(shù)據(jù) 寫入文件并且保存 等待連接 ''' import socket import threading import time import struct def function(newsock, address): FILEINFO_SIZE = struct.calcsize('128sI') '''定義文件信息(包含文件名和文件大?。┐笮 ?28s代表128個char[](文件名),I代表一個integer or long(文件大?。?'' while 1: try: fhead = newsock.recv(FILEINFO_SIZE) filename, filesize = struct.unpack('128sI', fhead) '''把接收到的數(shù)據(jù)庫進行解包,按照打包規(guī)則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') # 新建文件,并且準(zhǔn)備寫入 restsize = filesize print "recving..." while 1: if restsize > 102400: # 如果剩余數(shù)據(jù)包大于1024,就去1024的數(shù)據(jù)包 filedata = newsock.recv(10240) else: filedata = newsock.recv(restsize) fp.write(filedata) #break if not filedata: break fp.write(filedata) restsize = restsize - len(filedata) # 計算剩余數(shù)據(jù)包大小 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() break sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創(chuàng)建tcp連接 sock.bind(('10.240.146.82', 8887)) # 定于端口和ip sock.listen(5) # 監(jiān)聽 while True: newsock, address = sock.accept() print "accept another connection" tmpThread = threading.Thread(target=function, args=(newsock, address)) # 如果接收到文件,創(chuàng)建線程 tmpThread.start() # 執(zhí)行線程 print 'end'
客戶端代碼:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") ''' 輸入文件名,并且上傳 ''' import socket import time import struct import os f = 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 = 0 try: sock.connect(('10.240.146.82', 8887)) print 'connect...' except socket.timeout, e: print 'timeout', e except socket.error, e: print 'error', e except e: print 'any', e if 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) # 按照規(guī)則進行打包 sock.send(fhead) # 發(fā)送文件基本信息數(shù)據(jù) fp = open(filename, 'rb') fp2 = open('local_test.txt','wb') i = 0 while 1: # 發(fā)送文件 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()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Python3使用TCP編寫一個簡易的文件下載器功能
- Python Socket傳輸文件示例
- python 通過 socket 發(fā)送文件的實例代碼
- 基于python3實現(xiàn)socket文件傳輸和校驗
- python 使用socket傳輸圖片視頻等文件的實現(xiàn)方式
- 樹莓派采用socket方式文件傳輸(python)
- 使用python socket分發(fā)大文件的實現(xiàn)方法
- Python socket模塊ftp傳輸文件過程解析
- python socket 聊天室實例代碼詳解
- Python實現(xiàn)socket非阻塞通訊功能示例
- Python socket實現(xiàn)的文件下載器功能示例
相關(guān)文章
使用python計算方差方式——pandas.series.std()
這篇文章主要介紹了使用python計算方差方式——pandas.series.std(),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05詳細介紹pandas的DataFrame的append方法使用
這篇文章主要介紹了詳細介紹pandas的DataFrame的append方法使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python字典的基本用法實例分析【創(chuàng)建、增加、獲取、修改、刪除】
這篇文章主要介紹了Python字典的基本用法,結(jié)合具體實例形式分析了Python字典的創(chuàng)建、增加、獲取、修改、刪除等基本操作技巧與注意事項,需要的朋友可以參考下2019-03-03