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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
Python3简单实现串口通信的方法
Jun 12 Python
python安装scipy的方法步骤
Jun 26 Python
python读出当前时间精度到秒的代码
Jul 05 Python
基于python操作ES实例详解
Nov 16 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
Python数据正态性检验实现过程
Apr 18 Python
Python 保存加载mat格式文件的示例代码
Aug 04 Python
Python用dilb提取照片上人脸的示例
Oct 26 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上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
jQuery的slideToggle方法实例
2013/05/07 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
JS实现放烟花效果
2020/03/10 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
python实现下载文件的三种方法
2017/02/09 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
python 如何引入协程和原理分析
2020/11/30 Python
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
日语专业推荐信
2013/11/12 职场文书
网络编辑职责
2014/03/01 职场文书
小学家长评语大全
2014/04/16 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js