Python基于stuck实现scoket文件传输


Posted in Python onApril 02, 2020

使用socket中的struck来实现客户端发送

服务端:

客户端:

# -*- coding: UTF-8 -*-
import socket, time, socketserver, struct, os, _thread
 
host = '127.0.0.1'
port = 12307
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 定义socket类型
s.bind((host, port)) # 绑定需要监听的Ip和端口号,tuple格式
s.listen(1)
 
 
def conn_thread(connection, address):
  while True:
    try:
      connection.settimeout(600)
      fileinfo_size = struct.calcsize('12sl')#12s表示12个字符,l表示一个长整型数
      buf = connection.recv(fileinfo_size)
      if buf: # 如果不加这个if,第一个文件传输完成后会自动走到下一句,需要拿到文件大小信息才可以继续执行
        filename, filesize = struct.unpack('12sl', buf)
        filename_f = filename.decode("utf-8").strip('\00') # C语言中'\0'是一个ASCII码为0的字符,在python中表示占一个位置得空字符
        filenewname = os.path.join('e:\\', os.path.basename(filename_f))
        print(u'文件名称:%s , 文件大小: %s' % (filenewname, filesize))
        recvd_size = 0 # 定义接收了的文件大小
        file = open(filenewname, 'wb')
        print(u"开始传输文件内容")
        while not recvd_size == filesize:
          if filesize - recvd_size > 1024:
            rdata = connection.recv(1024)
            recvd_size += len(rdata)
          else:
            rdata = connection.recv(filesize - recvd_size)
            recvd_size = filesize
          file.write(rdata)
        file.close()
        print('receive done')
        # connection.close()
    except socket.timeout:
      connection.close()
 
while True:
  print(u"开始进入监听状态")
  connection, address = s.accept()
  print('Connected by ', address)
  # thread = threading.Thread(target=conn_thread,args=(connection,address)) #使用threading也可以
  # thread.start()
  _thread.start_new_thread(conn_thread, (connection, address))
s.close()

服务端效果:

# -*- coding: UTF-8 -*-
import socket, os, struct
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 12307))
while True:
  filepath = input('请输入要传输的文件绝对路径:\r\n')
  print(type(filepath))
  print(len(filepath.encode("utf-8")))
  if os.path.isfile(filepath):
    #fileinfo_size = struct.calcsize('20sl') # 定义打包规则
    # 定义文件头信息,包含文件名和文件大小
    fhead = struct.pack('12sl', filepath.encode("utf-8"), os.stat(filepath).st_size)
    print(os.stat(filepath).st_size)
    s.send(fhead)
    print (u'文件路径: ', filepath)
    # with open(filepath,'rb') as fo: 这样发送文件有问题,发送完成后还会发一些东西过去
    fo = open(filepath, 'rb')
    while True:
      filedata = fo.read(1024)
      if not filedata:
        break
      s.send(filedata)
    fo.close()
    print (u'传输成功')
    # s.close()

Python基于stuck实现scoket文件传输

客户端效果

Python基于stuck实现scoket文件传输

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python datetime时间格式化去掉前导0
Jul 31 Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
Jun 13 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
Cython编译python为so 代码加密示例
Dec 23 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
jupyter note 实现将数据保存为word
Apr 14 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 #Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 #Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 #Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 #Python
PyTorch中的C++扩展实现
Apr 02 #Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 #Python
Python运行提示缺少模块问题解决方案
Apr 02 #Python
You might like
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Python tcp传输代码实例解析
2020/03/18 Python
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
银行竞聘演讲稿
2014/05/16 职场文书
怎样写辞职信
2015/02/27 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python