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 itertools模块详解
May 09 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
Django Rest framework频率原理与限制
Jul 26 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
python global关键字的用法详解
Sep 05 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
Python lambda表达式原理及用法解析
Aug 18 Python
python通过函数名调用函数的几种场景
Sep 23 Python
Django 用户认证Auth组件的使用
Nov 30 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
php生成word并下载代码实例
2019/03/15 PHP
JQuery live函数
2010/12/24 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
js实现图片上传预览原理分析
2017/07/13 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
银行先进个人事迹材料
2014/05/11 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android