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实现DNS正向查询、反向查询的例子
Apr 25 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
详解Python是如何实现issubclass的
Jul 24 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
Python发送邮件封装实现过程详解
May 09 Python
python 利用toapi库自动生成api
Oct 19 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引擎的发展
2006/11/16 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
js常用代码段收集
2011/10/28 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
实践Vim配置python开发环境
2018/07/02 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
python基于win32api实现键盘输入
2020/12/09 Python
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
经典c++面试题三
2015/07/08 面试题
餐厅考勤管理制度
2014/01/28 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
博士生专家推荐信
2015/03/25 职场文书
优秀大学生自荐信
2015/03/26 职场文书
医院员工辞职信范文
2015/05/12 职场文书
护士岗位竞聘书
2015/09/15 职场文书