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

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

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亚洲精品久久久久 | 91麻豆精品国产自产在线 | 1313午夜精品理伦片 | 亚洲国产精品成人久久 | 欧洲一级黑寡妇 | 欧美成人手机 | 久久久久免费视频 | 精品亚洲欧美中文字幕在线看 | 欧美日韩一区二区综合在线视频 | 亚洲国产精品一区二区三区久久 | 把老师操了 | 国产一区视频在线免费观看 | 天天天综合网 | 出差被灌醉绝伦的上司日本 | 日韩精品欧美激情国产一区 | 亚洲国产精品久久久久久 | www.色小妹 | 国产精品欧美亚洲韩国日本99 | 人与蛇boxxⅹ | 亚欧国产 | 免费看黄色一级 | 暖暖日本在线观看免费 | 非洲黑人bbwbbwbbw | 潘甜甜在线观看 | 国产免费看黄的私人影院 | 国产亚洲精品美女2020久久 | 女人全身裸露无遮挡免费观看 | 美国艳星lisann成人作品 | 国产男女乱淫真视频全程播放 | 欧美jjvideo | 美日韩在线观看 | 极品美女写真菠萝蜜视频 | 美女毛片在线 | 日本大尺度动漫在线观看缘之空 | 美女又爽又黄免费 | 免费国产午夜高清在线视频 | 小草视频免费观看在线 | 亚洲精品第一国产综合高清 | coolgay男男gayxxx chinese壮直男gay老年人 chinese野外gay军人 | 欧美男同互吃gay老头 |