Python socket实现的文件下载器功能示例


Posted in Python onNovember 15, 2019

本文实例讲述了Python socket实现的文件下载器功能。分享给大家供大家参考,具体如下:

文件下载器

先写客户端再写服务端

1.tcp下载器客户端

import socket
def main():
  # 创建套接字
  tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  # 获取服务器ip和port
  dest_ip = input("请输入下载服务器的ip:")
  dest_port = int(input("请输入下载服务器的port:"))
  # 连接服务器
  tcp_socket.connect((dest_ip,dest_port))
  # 获取下载的文件名称
  download_file_name = input("请输入要下载的文件名称:")
  # 将文件名称发送到服务器
  tcp_socket.send(download_file_name.encode("gbk"))
  # 接收文件中的数据
  recv_data = tcp_socket.recv(1024) # 1024=1k 1024*1024=1M
  if recv_data:
    # 保存接收到的数据到新文件
    with open("[新]"+download_file_name.wb) as f:
      f.write(recv_data)
  # 关闭套接字
  tcp_socket.close()
if __name__ == '__main__':
  main()

2.tcp下载器服务端

import socket
def send_file_2_client(new_client_socket,client_addr):
  # 1.接收客户端需要下载的文件名
  file_name = new_client_socket.recv(1024).decode("gbk")
  print("客户端(%s)需要下载的文件是:%s" %(str(client_addr),file_name))
  file_content = None
  # 2.打开这个文件,读取数据
  try:
    f = open(file_name,"rb")
    file_content = f.read()
    f.close()
  except Exception as ret:
    print("没有要下载的文件(%s)" % file_name)
  # 3.发送文件数据给客户端
  if file_content:
    new_client_socket.send(file_content)
def main():
  # 创建套接字
  tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  # 绑定本地信息
  tcp_server_socket.bind("",7890)
  # 让默认套接字由主动变为被动listen
  tcp_server_socket.listen(128)
  while True:
    # 等待客户端的连接 accept
    new_client_socket ,client_addr = tcp_server_socket.accept()
    # 调用发送文件函数,完成客户端的服务
    send_file_2_client(new_client_socket,client_addr)
    # 关闭套接字
    new_client_socket.close()
  tcp_server_socket.close()
if __name__ == "__main__":
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实用日期时间处理方法汇总
May 09 Python
python入门前的第一课 python怎样入门
Mar 06 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python爬取淘宝商品销量信息
Nov 16 Python
pytorch permute维度转换方法
Dec 14 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
Django import export实现数据库导入导出方式
Apr 03 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
Opencv 图片的OCR识别的实战示例
Mar 02 Python
Python日志模块logging用法
Jun 05 Python
Django通过dwebsocket实现websocket的例子
Nov 15 #Python
Python numpy线性代数用法实例解析
Nov 15 #Python
Django中提示消息messages的设置方式
Nov 15 #Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 #Python
Django实现简单网页弹出警告代码
Nov 15 #Python
使用Python函数进行模块化的实现
Nov 15 #Python
Python argparse模块应用实例解析
Nov 15 #Python
You might like
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
vue cli 全面解析
2018/02/28 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
python测试驱动开发实例
2014/10/08 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
Python实现CET查分的方法
2015/03/10 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
pandas ix &iloc &loc的区别
2019/01/10 Python
Python Pillow Image Invert
2019/01/22 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
大学生志愿者感言
2014/01/15 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
保安岗位职责
2014/02/21 职场文书
土地租赁意向书
2014/07/30 职场文书
典型事迹材料范文
2014/12/29 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
详解Redis瘦身指南
2021/05/26 Redis
python数字图像处理实现图像的形变与缩放
2022/06/28 Python