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翻译软件实现代码(使用google api完成)
Nov 26 Python
在Python中使用lambda高效操作列表的教程
Apr 24 Python
Python3遍历目录树实现方法
May 22 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
深入理解python多进程编程
Jun 12 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 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中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
AngularJS快速入门
2015/04/02 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
初探nodeJS
2017/01/24 NodeJs
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
JS实现复制功能
2017/03/01 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
python如何对实例属性进行类型检查
2018/03/20 Python
python-opencv颜色提取分割方法
2018/12/08 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
使用django自带的user做外键的方法
2020/11/30 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
工作违纪检讨书
2014/02/17 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android