一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python:socket傳輸大文件示例

python:socket傳輸大文件示例

2020-09-18 10:29夏夜晚風 Python

本篇文章主要介紹了python:socket傳輸大文件示例,具有一定的參考價值,有興趣的可以了解一下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import time
'''
等待連接
等待發送文件
讀取數據
寫入文件并且保存
等待連接
'''
import socket
import threading
import time
import struct
 
 
def 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()
      break
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創建tcp連接
sock.bind(('10.240.146.82', 8887)) # 定于端口和ip
sock.listen(5) # 監聽
while True:
  newsock, address = sock.accept()
  print "accept another connection"
  tmpThread = threading.Thread(target=function, args=(newsock, address)) # 如果接收到文件,創建線程
  tmpThread.start() # 執行線程
print 'end'

客戶端代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/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) # 按照規則進行打包
  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()

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/q/1010000006727022/a-1020000006728168

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产精品自产在线播放 | 国产在线精品99一卡2卡 | 四虎在线精品免费高清在线 | 欧美一级片在线免费观看 | 国产成人成人一区二区 | 成人1234 | 国产经典一区二区三区蜜芽 | 成人永久免费福利视频网站 | 亚洲 日本 天堂 国产 在线 | 欧美高清3dfreexxxx性 | 4438全国最大免费观看 | 国产视频一区二区 | 99热成人精品热久久669 | 欧美a一片xxxx片与善交 | 男人的天堂欧美 | 精品精品国产自在香蕉网 | 第一次处破女18分钟 | 色姑娘久| 亚洲天堂影院在线观看 | 日本高清二三四本2021 | 国产成人lu在线视频 | 热巴在公交车h文 | 俺去也亚洲色图 | 日本春菜花在线中文字幕 | 国产精品男人的天堂 | 午夜a一级毛片 | 亚洲欧美另类第一页 | 欧美成人午夜片一一在线观看 | 色吊丝每日永久访问网站 | 任你操视频在线观看 | 双性总裁被调教1v1 双性双根 | 国产99久久九九精品免费 | 5555kkkk香蕉在线观看 | 亚洲一区二区三区福利在线 | 日本一区二区三区四区无限 | 欧美视频在线一区二区三区 | 国产一级片免费视频 | 国产123区| 国内精品 大秀视频 日韩精品 | 98色花堂永久地址国产精品 | 欧美特级午夜一区二区三区 |