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中is和id的用法
Apr 03 Python
pymongo为mongodb数据库添加索引的方法
May 11 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
使用Python更换外网IP的方法
Jul 09 Python
Python socket实现的简单通信功能示例
Aug 21 Python
基于Python实现用户管理系统
Feb 26 Python
解决Django中多条件查询的问题
Jul 18 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
Python print不能立即打印的解决方式
Feb 19 Python
Python实现京东抢秒杀功能
Jan 25 Python
正确的理解和使用Django信号(Signals)
Apr 14 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利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
python编写的最短路径算法
2015/03/25 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
python hash每次调用结果不同的原因
2019/11/21 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
Linux内核产生并发的原因
2012/07/13 面试题
公积金单位接收函
2014/01/11 职场文书
初一体育教学反思
2014/01/29 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
销售求职信范文
2014/05/26 职场文书
小学科学教学计划
2015/01/21 职场文书
力克胡哲观后感
2015/06/10 职场文书
Golang 结构体数据集合
2022/04/22 Golang