python单线程文件传输的实例(C/S)


Posted in Python onFebruary 13, 2019

客户端代码:

#-*-encoding:utf-8-*-
 
import socket
import os
import sys
import math
import time
 
def progressbar(cur, total):
 percent = '{:.2%}'.format(float(cur) / float(total))
 sys.stdout.write('\r')
 sys.stdout.write("[%-50s] %s" % (
       '=' * int(math.floor(cur * 50 / total)),
       percent))
 sys.stdout.flush()
 
def getFileSize(file):
 file.seek(0, os.SEEK_END)
 fileLength = file.tell()
 file.seek(0, 0)
 return fileLength
 
def getFileName(fileFullPath):
 index = fileFullPath.rindex('\\')
 if index == -1:
  return fileFullPath 
 else:
  return fileFullPath[index+1:]
 
def transferFile():
 fileFullPath = r"%s" % raw_input("File path: ").strip("\"")
 if os.path.exists(fileFullPath):
  timeStart = time.clock()
  file = open(fileFullPath, 'rb')
  fileSize = getFileSize(file)
  client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  client.connect((targetHost, targetPort))
  # send file size
  client.send(str(fileSize))
  response = client.recv(1024)
  # send file name
  client.send(getFileName(fileFullPath))
  response = client.recv(1024)
  # send file content
  sentLength = 0
  while sentLength < fileSize:
   bufLen = 1024
   buf = file.read(bufLen)
   client.send(buf)
   sentLength += len(buf)
   process = int(float(sentLength) / float(fileSize) * 100)
   progressbar(process, 100)
  client.recv(1024)
  file.close()
  timeEnd = time.clock()
  print "\r\nFinished, spent %d seconds" % (timeEnd - timeStart)
 else:
  print "File doesn't exist"
 
targetHost = raw_input("Server IP Address: ")
targetPort = int(raw_input("Server port: "))
 
while True:
 transferFile()

服务器端代码:

#-*-encoding:utf-8-*-
 
import socket
import threading
import os
import sys
import math
 
bindIp = "0.0.0.0"
bindPort = 9999
 
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bindIp, bindPort))
server.listen(1)
print "Listening on %s:%d" % (bindIp, bindPort)
 
def progressbar(cur, total):
 percent = '{:.2%}'.format(float(cur) / float(total))
 sys.stdout.write('\r')
 sys.stdout.write("[%-50s] %s" % (
       '=' * int(math.floor(cur * 50 / total)),
       percent))
 sys.stdout.flush()
 
def checkFileName(originalFileName):
 extensionIndex = originalFileName.rindex(".")
 name = originalFileName[:extensionIndex]
 extension = originalFileName[extensionIndex+1:]
 
 index = 1
 newNameSuffix = "(" + str(index) + ")"
 finalFileName = originalFileName
 if os.path.exists(finalFileName):
  finalFileName = name + " " + newNameSuffix + "." + extension
 while os.path.exists(finalFileName):
  index += 1
  oldSuffix = newNameSuffix
  newNameSuffix = "(" + str(index) + ")"
  finalFileName = finalFileName.replace(oldSuffix, newNameSuffix)
 return finalFileName
 
def handleClient(clientSocket):
 # receive file size
 fileSize = int(clientSocket.recv(1024))
 # print "[<==] File size received from client: %d" % fileSize
 clientSocket.send("Received")
 # receive file name
 fileName = clientSocket.recv(1024)
 # print "[<==] File name received from client: %s" % fileName
 clientSocket.send("Received")
 fileName = checkFileName(fileName)
 file = open(fileName, 'wb')
 # receive file content
 print "[==>] Saving file to %s" % fileName
 receivedLength = 0
 while receivedLength < fileSize:
  bufLen = 1024
  if fileSize - receivedLength < bufLen:
   bufLen = fileSize - receivedLength
  buf = clientSocket.recv(bufLen)
  file.write(buf)
  receivedLength += len(buf)
  process = int(float(receivedLength) / float(fileSize) * 100)
  progressbar(process, 100)
 
 file.close()
 print "\r\n[==>] File %s saved." % fileName
 clientSocket.send("Received")
 
while True:
 client, addr = server.accept()
 print "[*] Accepted connection from: %s:%d" % (addr[0], addr[1])
 
 clientHandler = threading.Thread(target=handleClient, args=(client,))
 clientHandler.start()

运行结果示例:

服务器端:

python单线程文件传输的实例(C/S)

客户端(服务器端做了端口映射:59999->9999):

python单线程文件传输的实例(C/S)

以上这篇python单线程文件传输的实例(C/S)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python二分法搜索算法实例分析
May 11 Python
Python中表示字符串的三种方法
Sep 06 Python
Django自定义manage命令实例代码
Feb 11 Python
Python应用库大全总结
May 30 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
Django的CVB实例详解
Feb 10 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
Django分页器的用法你都了解吗
May 26 Python
Python 实现文件打包、上传与校验的方法
Feb 13 #Python
使用python3构建文件传输的方法
Feb 13 #Python
对python 自定义协议的方法详解
Feb 13 #Python
Python 实现两个服务器之间文件的上传方法
Feb 13 #Python
Python魔法方法详解
Feb 13 #Python
Python函数中不定长参数的写法
Feb 13 #Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 #Python
You might like
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
jquery 插件学习(一)
2012/08/06 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
Python用GET方法上传文件
2015/03/10 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
python实现年会抽奖程序
2019/01/22 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
详解Python3定时器任务代码
2019/09/23 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
毕业生欢送会主持词
2014/03/31 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
标准版离职证明书
2014/09/12 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
青涩记忆观后感
2015/06/18 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
详解MySQL中的主键与事务
2021/05/27 MySQL
python析构函数用法及注意事项
2021/06/22 Python