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设计模式编程中建造者模式的使用
Mar 02 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
Python Flask基础教程示例代码
Feb 07 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
python使用matplotlib绘制热图
Nov 07 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
python中return不返回值的问题解析
Jul 22 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
python图片合成的示例
Nov 09 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
Python爬虫基础初探selenium
May 31 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
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
nodejs教程之入门
2014/11/21 NodeJs
Javascript核心读书有感之语句
2015/02/11 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
python生成九宫格图片
2018/11/19 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
python 递归相关知识总结
2021/03/03 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
医药代表个人求职信范本
2013/12/19 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
超市客服工作职责
2014/06/11 职场文书
售后客服个人自我评价
2014/09/14 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
2014年药店工作总结
2014/11/20 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
工作简历的自我评价
2019/05/16 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
节约用水广告语60条
2019/11/14 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js