最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python:socket傳輸大文件示例

 更新時(shí)間:2017年01月18日 10:47:14   作者:夏夜晚風(fēng)  
本篇文章主要介紹了python:socket傳輸大文件示例,具有一定的參考價(jià)值,有興趣的可以了解一下,

文件可以傳輸,但是對(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python編譯為二進(jìn)制so可執(zhí)行文件實(shí)例

    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)練操作

    這篇文章主要介紹了pytorch 6 batch_train 批訓(xùn)練操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 使用Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件

    使用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ò)問(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)

    本文主要介紹了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操作 hbase 數(shù)據(jù)的方法

    python操作 hbase 數(shù)據(jù)的方法

    下面小編就為大家?guī)?lái)一篇python操作 hbase 數(shù)據(jù)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • python設(shè)計(jì)模式之抽象工廠模式詳解

    python設(shè)計(jì)模式之抽象工廠模式詳解

    這篇文章主要介紹了python設(shè)計(jì)模式之抽象工廠模式,通過(guò)案例分析,主要說(shuō)明了該項(xiàng)設(shè)計(jì)模式的主要解決問(wèn)題,優(yōu)缺點(diǎn)以及何時(shí)使用等,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Python列表創(chuàng)建與銷毀及緩存池機(jī)制

    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ō)明

    這篇文章主要介紹了python 中os模塊os.path.exists()的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python基于event實(shí)現(xiàn)線程間通信控制

    python基于event實(shí)現(xiàn)線程間通信控制

    這篇文章主要介紹了python基于event實(shí)現(xiàn)線程間通信控制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

蓬安县| 河津市| 集安市| 青州市| 吉林市| 衡阳县| 开原市| 兴山县| 竹山县| 天等县| 巴青县| 大姚县| 石嘴山市| 青岛市| 泰和县| 南阳市| 铜鼓县| 闽清县| 新蔡县| 浏阳市| 平顶山市| 翼城县| 客服| 石河子市| 宁南县| 临清市| 白沙| 大埔县| 讷河市| 玉门市| 青州市| 桂平市| 杭锦后旗| 交口县| 吉林市| 武冈市| 田林县| 海原县| 库尔勒市| 乳山市| 平塘县|