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 16 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
Python实现的文轩网爬虫完整示例
May 16 Python
python async with和async for的使用
Jun 20 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
详解python中docx库的安装过程
Nov 08 Python
Python字符串的修改方法实例
Dec 19 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python函数调用,循环,列表复制实例
May 03 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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
15种PHP Encoder的比较
2007/04/17 PHP
php获得当前的脚本网址
2007/12/10 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
django 自定义过滤器的实现
2019/02/26 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
详解python中的index函数用法
2019/08/06 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
公司离职证明样本
2014/09/13 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
公积金具结保证书
2015/05/11 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS