python:socket傳輸大文件示例
文件可以傳輸,但是對(duì)比傳輸前后的文件: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')
'''定義文件信息(包含文件名和文件大?。┐笮?。128s代表128個(gè)char[](文件名),I代表一個(gè)integer or long(文件大小)'''
while 1:
try:
fhead = newsock.recv(FILEINFO_SIZE)
filename, filesize = struct.unpack('128sI', fhead)
'''把接收到的數(shù)據(jù)庫(kù)進(jìn)行解包,按照打包規(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) # 計(jì)算剩余數(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ī)則進(jìn)行打包
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()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python3使用TCP編寫一個(gè)簡(jiǎn)易的文件下載器功能
- Python Socket傳輸文件示例
- python 通過(guò) socket 發(fā)送文件的實(shí)例代碼
- 基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn)
- python 使用socket傳輸圖片視頻等文件的實(shí)現(xiàn)方式
- 樹莓派采用socket方式文件傳輸(python)
- 使用python socket分發(fā)大文件的實(shí)現(xiàn)方法
- Python socket模塊ftp傳輸文件過(guò)程解析
- python socket 聊天室實(shí)例代碼詳解
- Python實(shí)現(xiàn)socket非阻塞通訊功能示例
- Python socket實(shí)現(xiàn)的文件下載器功能示例
相關(guān)文章
Python編譯為二進(jìn)制so可執(zhí)行文件實(shí)例
今天小編就為大家分享一篇Python編譯為二進(jìn)制so可執(zhí)行文件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
pytorch 6 batch_train 批訓(xùn)練操作
這篇文章主要介紹了pytorch 6 batch_train 批訓(xùn)練操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
使用Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件
在現(xiàn)代工作環(huán)境中,我們經(jīng)常需要向多個(gè)收件人發(fā)送個(gè)性化的郵件,因此本文小編為大家整理了Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件的示例代碼,希望對(duì)大家有所幫助2023-11-11
Win10用vscode打開anaconda環(huán)境中的python出錯(cuò)問(wèn)題的解決
這篇文章主要介紹了Win10用vscode打開anaconda環(huán)境中的python出錯(cuò),本文給大家分享解決方案,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Python寫一個(gè)簡(jiǎn)單的api接口的實(shí)現(xiàn)
本文主要介紹了Python寫一個(gè)簡(jiǎn)單的api接口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python列表創(chuàng)建與銷毀及緩存池機(jī)制
這篇文章主要介紹了Python列表創(chuàng)建與銷毀及緩存池機(jī)制,文章基于python展開對(duì)列表創(chuàng)建與銷毀內(nèi)容的展開,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
python 中os模塊os.path.exists()的用法說(shuō)明
這篇文章主要介紹了python 中os模塊os.path.exists()的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
python基于event實(shí)現(xiàn)線程間通信控制
這篇文章主要介紹了python基于event實(shí)現(xiàn)線程間通信控制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01

