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为tornado添加recaptcha验证码功能
Feb 26 Python
python实现颜色rgb和hex相互转换的函数
Mar 19 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
Python综合应用名片管理系统案例详解
Jan 03 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
python使用Geany编辑器配置方法
Feb 21 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python 日期与时间转换的方法
Aug 01 Python
Python面向对象实现方法总结
Aug 12 Python
python实现简单区块链结构
Apr 25 Python
python小型的音频操作库mp3Play
Apr 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
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php实现telnet功能示例
2014/04/08 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python构建XML树结构的方法示例
2017/06/30 Python
tornado 多进程模式解析
2018/01/15 Python
Python3中详解fabfile的编写
2018/06/24 Python
对Django url的几种使用方式详解
2019/08/06 Python
python获取Linux发行版名称
2019/08/30 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
产假请假条
2014/04/10 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android