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 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
python中dict()的高级用法实现
Nov 13 Python
基于python中__add__函数的用法
Nov 25 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
教你用python实现一个无界面的小型图书管理系统
May 21 Python
Elasticsearch 基本查询和组合查询
Apr 19 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 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
不可错过的十本Python好书
2017/07/06 Python
python aiohttp的使用详解
2019/06/20 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
浅析python中的del用法
2020/09/02 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
致裁判员加油稿
2014/02/08 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
出国留学计划书
2014/04/27 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
大学生学年个人总结
2015/02/15 职场文书
2016小学新学期寄语
2015/12/04 职场文书
Redis主从复制操作和配置详情
2022/09/23 Redis