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数据结构之二叉树的遍历实例
Apr 29 Python
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
详解Django的CSRF认证实现
Oct 09 Python
python实现AES加密解密
Mar 28 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
用于ETL的Python数据转换工具详解
Jul 21 Python
python中的unittest框架实例详解
Feb 05 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
Python利用zhdate模块实现农历日期处理
Mar 31 Python
深入理解pytorch库的dockerfile
Jun 10 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几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
ext jquery 简单比较
2010/04/07 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
JavaScript实现轮播图特效
2020/04/10 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python中查看变量内存地址的方法
2015/05/05 Python
详解django中自定义标签和过滤器
2017/07/03 Python
基于django传递数据到后端的例子
2019/08/16 Python
Python实现名片管理系统
2020/02/14 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
小学语文教学反思
2014/02/10 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
安全生产大检查方案
2014/05/07 职场文书
教师节倡议书
2014/08/30 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
小学体育教学随笔
2015/08/14 职场文书
学术会议开幕词
2016/03/03 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android