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之编写简单简单连接数据库并执行查询操作
Feb 27 Python
浅谈python字符串方法的简单使用
Jul 18 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
python opencv判断图像是否为空的实例
Jan 26 Python
selenium处理元素定位点击无效问题
Jun 12 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
Python适配器模式代码实现解析
Aug 02 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 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
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
js对象的比较
2011/02/26 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python字符串的一些操作方法总结
2019/06/10 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
介绍下WebSphere的安全性
2013/01/31 面试题
女大学生自我鉴定
2013/12/09 职场文书
2013年军训通讯稿
2014/02/05 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
高一新生军训方案
2014/05/12 职场文书
公司委托书格式
2014/08/01 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js