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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
Python实现栈的方法
May 26 Python
numpy数组拼接简单示例
Dec 15 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
Python实现多属性排序的方法
Dec 05 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
python时间日期操作方法实例小结
Feb 06 Python
python神经网络编程实现手写数字识别
May 27 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 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高手?学会“懒惰”的编程
2006/12/05 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python 解析html之BeautifulSoup
2009/07/07 Python
python遍历数组的方法小结
2015/04/30 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
会计自我鉴定范文
2013/10/06 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
超市中秋节促销方案
2014/03/21 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
保洁员岗位职责
2015/02/04 职场文书
男生贾里读书笔记
2015/06/30 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle