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解释执行原理分析
Aug 22 Python
python批量修改文件名的实现代码
Sep 01 Python
在Python的Bottle框架中使用微信API的示例
Apr 23 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
Django models filter筛选条件详解
Mar 16 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
python sleep和wait对比总结
Feb 03 Python
一行Python命令实现批量加水印
Apr 07 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
初探PHP5
2006/10/09 PHP
php 破解防盗链图片函数
2008/12/09 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
openlayers4实现点动态扩散
2020/08/17 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python实现猜拳游戏
2020/03/04 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
四查四看剖析材料
2014/02/14 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
2014年科室工作总结
2014/11/20 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
个人政治思想总结
2015/03/05 职场文书
教学质量月活动总结
2015/05/11 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
Oracle中update和select 关联操作
2022/01/18 Oracle