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 相关文章推荐
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
python2 与python3的print区别小结
Jan 16 Python
PyQt5每天必学之切换按钮
Aug 20 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
python 有效的括号的实现代码示例
Nov 11 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
python 下载m3u8视频的示例代码
Nov 11 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
基于 Python 实践感知器分类算法
Jan 07 Python
如何用python反转图片,视频
Apr 24 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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
jquery弹出框的用法示例(一)
2013/08/26 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
javascript中for/in循环及使用技巧
2015/09/01 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
python 中的int()函数怎么用
2017/10/17 Python
python for和else语句趣谈
2019/07/02 Python
Python中itertools的用法详解
2020/02/07 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
中学门卫岗位职责
2013/12/26 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
接收函
2019/04/22 职场文书
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
Python闭包的定义和使用方法
2022/04/11 Python