python基于TCP实现的文件下载器功能案例


Posted in Python onDecember 10, 2019

本文实例讲述了python基于TCP实现的文件下载器功能。分享给大家供大家参考,具体如下:

服务器 参考代码如下:

from socket import *
import sys
def get_file_content(file_name):
  """获取文件的内容"""
  try:
    with open(file_name, "rb") as f:
      content = f.read()
    return content
  except:
    print("没有下载的文件:%s" % file_name)
def main():
  if len(sys.argv) != 2:
    print("请按照如下方式运行:python3 xxx.py 7890")
    return
  else:
    # 运行方式为python3 xxx.py 7890
    port = int(sys.argv[1])
  # 创建socket
  tcp_server_socket = socket(AF_INET, SOCK_STREAM)
  # 本地信息
  address = ('', port)
  # 绑定本地信息
  tcp_server_socket.bind(address)
  # 将主动套接字变为被动套接字
  tcp_server_socket.listen(128)
  while True:
    # 等待客户端的链接,即为这个客户端发送文件
    client_socket, clientAddr = tcp_server_socket.accept()
    # 接收对方发送过来的数据
    recv_data = client_socket.recv(1024) # 接收1024个字节
    file_name = recv_data.decode("utf-8")
    print("对方请求下载的文件名为:%s" % file_name)
    file_content = get_file_content(file_name)
    # 发送文件的数据给客户端
    # 因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
    if file_content:
      client_socket.send(file_content)
    # 关闭这个套接字
    client_socket.close()
  # 关闭监听套接字
  tcp_server_socket.close()
if __name__ == "__main__":
  main()

客户端 参考代码如下:

from socket import *
def main():
  # 创建socket
  tcp_client_socket = socket(AF_INET, SOCK_STREAM)
  # 目的信息
  server_ip = input("请输入服务器ip:")
  server_port = int(input("请输入服务器port:"))
  # 链接服务器
  tcp_client_socket.connect((server_ip, server_port))
  # 输入需要下载的文件名
  file_name = input("请输入要下载的文件名:")
  # 发送文件下载请求
  tcp_client_socket.send(file_name.encode("utf-8"))
  # 接收对方发送过来的数据,最大接收1024个字节(1K)
  recv_data = tcp_client_socket.recv(1024)
  # print('接收到的数据为:', recv_data.decode('utf-8'))
  # 如果接收到数据再创建文件,否则不创建
  if recv_data:
    with open("[接收]"+file_name, "wb") as f:
      f.write(recv_data)
  # 关闭套接字
  tcp_client_socket.close()
if __name__ == "__main__":
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python json模块使用实例
Apr 11 Python
Python中的getopt函数使用详解
Jul 28 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
python实现redis三种cas事务操作
Dec 19 Python
Python中collections模块的基本使用教程
Dec 07 Python
python实现月食效果实例代码
Jun 18 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
Python中断多重循环的思路总结
Oct 04 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python3 实现爬取网站下所有URL方式
Jan 16 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
使用pandas的box_plot去除异常值
Dec 10 #Python
Python 中如何实现参数化测试的方法示例
Dec 10 #Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 #Python
YUV转为jpg图像的实现
Dec 09 #Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 #Python
Python箱型图处理离群点的例子
Dec 09 #Python
Python实现非正太分布的异常值检测方式
Dec 09 #Python
You might like
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
PHP pear安装配置教程
2016/05/14 PHP
php中使用websocket详解
2016/09/23 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
jquery 简单的进度条实现代码
2010/03/11 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python中pass的作用与使用教程
2020/11/13 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
新郎新娘婚礼答谢词
2014/01/11 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
多媒体教室标语
2014/06/26 职场文书
关于感恩的作文
2019/08/26 职场文书