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中的tuple元组详细介绍
Feb 02 Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 Python
python检测是文件还是目录的方法
Jul 03 Python
你应该知道的python列表去重方法
Jan 17 Python
利用Django模版生成树状结构实例代码
May 19 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
Python实现Restful API的例子
Aug 31 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
Python socket如何解析HTTP请求内容
Feb 12 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简单实现sql防注入的方法
2016/04/22 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
python实现ID3决策树算法
2018/08/29 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
python 解决函数返回return的问题
2020/12/05 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
如何查找网页漏洞
2016/06/22 面试题
办理退休介绍信
2014/01/09 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
商场主管竞聘书
2014/03/31 职场文书
校庆活动方案
2014/03/31 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
普通党员个人整改措施
2014/10/27 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers