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程序运行原理图文解析
Feb 10 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
Python实现注册、登录小程序功能
Sep 21 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
python检测服务器端口代码实例
Aug 31 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
python实现数字炸弹游戏
Jul 17 Python
python中的插入排序的简单用法
Jan 19 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实现ping
2006/10/09 PHP
浅谈PHP语法(1)
2006/10/09 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
php简单统计在线人数的方法
2016/05/10 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
Python接口测试get请求过程详解
2020/02/28 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
行政经理的岗位职责
2013/11/23 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
开业庆典主持词
2014/03/21 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
学生保证书
2015/01/16 职场文书
七一建党节慰问信
2015/02/14 职场文书
自荐信怎么写
2015/03/04 职场文书
2015年团支书工作总结
2015/04/03 职场文书
数学复习课教学反思
2016/02/18 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
python 爬取吉首大学网站成绩单
2021/06/02 Python
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
php去除deprecated的实例方法
2021/11/17 PHP
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python