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开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
django创建简单的页面响应实例教程
Sep 06 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
Python求两个字符串最长公共子序列代码实例
Mar 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 Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
让python json encode datetime类型
2010/12/28 Python
浅析Python中的多重继承
2015/04/28 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
医院办公室主任职责
2013/12/29 职场文书
医院门卫岗位职责
2013/12/30 职场文书
校长先进事迹材料
2014/02/01 职场文书
企业催款函范本
2015/06/24 职场文书
九九重阳节致辞
2015/07/31 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js