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自动调用IE打开某个网站的方法
Jun 03 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
Python 基础知识之字符串处理
Jan 06 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
在python中使用nohup命令说明
Apr 16 Python
python中np是做什么的
Jul 21 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
Python 批量下载阴阳师网站壁纸
May 19 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
农行实习自我鉴定
2013/09/22 职场文书
函授毕业自我鉴定
2013/12/19 职场文书
《胡杨》教学反思
2014/02/16 职场文书
环保建议书作文
2014/03/12 职场文书
校运会通讯稿
2015/07/18 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书