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字符串拼接、截取及替换方法总结分析
Apr 13 Python
Python三级菜单的实例
Sep 13 Python
Python实现的爬取网易动态评论操作示例
Jun 06 Python
Flask配置Cors跨域的实现
Jul 12 Python
python实现键盘输入的实操方法
Jul 16 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
python super用法及原理详解
Jan 20 Python
Python类的继承super相关原理解析
Oct 22 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
Python 一键获取电脑浏览器的账号密码
May 11 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
php删除数组元素示例分享
2014/02/17 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
简单实现python画圆功能
2018/01/25 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
住房公积金接收函
2014/01/09 职场文书
运动会稿件100字
2014/02/21 职场文书
药品业务员岗位职责
2014/04/17 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
人民的好儿女观后感
2015/06/18 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers
在 Python 中利用 Pool 进行多线程
2022/04/24 Python
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL