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中break语句的用法
May 14 Python
Python中方法链的使用方法
Feb 23 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
Python中pyecharts安装及安装失败的解决方法
Feb 18 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
Python小白垃圾回收机制入门
Jun 09 Python
Python函数的迭代器与生成器的示例代码
Jun 18 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
深入理解node.js http模块
2018/01/24 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
js实现图片实时时钟
2020/01/15 Javascript
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python中关于浮点数的冷知识
2019/09/22 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
python__new__内置静态方法使用解析
2020/01/07 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
留学经费担保书
2014/05/12 职场文书
设计专业自荐信
2014/06/19 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS