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随机生成彩票号码的方法
Mar 05 Python
python实现Decorator模式实例代码
Feb 09 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
Python列表切片操作实例总结
Feb 19 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 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语法速查表
2007/01/02 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
smarty模板数学运算示例
2016/12/11 PHP
自制PHP框架之设计模式
2017/05/07 PHP
php swoft框架实例用法
2020/12/22 PHP
JS定义回车事件(实现代码)
2013/07/08 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
Python扩展内置类型详解
2018/03/26 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python版中国省市经纬度
2020/02/11 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
精彩的广告词
2014/03/19 职场文书
艺术教育实施方案
2014/05/03 职场文书
党员志愿者活动总结
2014/06/26 职场文书
党章培训心得体会
2014/09/04 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
六年级数学教学反思
2016/02/16 职场文书