基于TCP协议的基础版本,不支持大文件

Client.py

  1. import socket
  2. def main():
  3. # 1. 创建套接字
  4. tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5. # 2. 获取服务器的ip port
  6. # dest_ip = input("请输入下载服务器的IP:")
  7. # dest_port = int(input("请输入下载服务器的Port:"))
  8. # 3. 链接服务器
  9. # tcp_socket.connect((dest_ip, dest_port))
  10. tcp_socket.connect(('127.0.0.1', 7890))
  11. # 4. 获取下载的文件名字
  12. download_file_name = input("请输入要下载的文件名字: ")
  13. # 5. 将文件名字发送到服务器
  14. tcp_socket.send(download_file_name.encode('utf-8'))
  15. # 6. 接收文件中的数据
  16. recv_data = tcp_socket.recv(1024) # 1024--->1k
  17. # 7. 保存接收到的数据到文件中
  18. if recv_data:
  19. with open("[新]"+download_file_name,"wb") as f:
  20. f.write(recv_data)
  21. # 8. 关闭套接字
  22. tcp_socket.close()
  23. if __name__ == '__main__':
  24. main()

Server.py

  1. import socket
  2. def send_file_2_client(new_client_socket, client_addr):
  3. # 1. 接收客户端发送过来的,要下载的文件名
  4. file_name = new_client_socket.recv(1024).decode('utf-8')
  5. print("客户端[%s]需要下载的文件是:%s" % (str(client_addr), file_name))
  6. file_content = None
  7. # 2. 打开这个文件,读取数据
  8. try:
  9. f = open(file_name, "rb")
  10. file_content = f.read()
  11. f.close()
  12. except Exception as ret:
  13. print("没有要下载的文件[%s]" % file_name)
  14. # 3. 发送文件的数据给客户端
  15. # new_client_socket.send("hahahah".encode('utf-8')) # 调试的时候,先给发个假得
  16. if file_content:
  17. new_client_socket.send(file_content)
  18. def main():
  19. # 1. 创建套接字
  20. tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  21. # 2. 创建监听
  22. tcp_server_socket.bind(("", 7890))
  23. # 3. 套接字被动监听数量
  24. tcp_server_socket.listen(128)
  25. while True:
  26. print("wait...")
  27. # 获取客户端socket,客户端连接信息
  28. new_client_socket, client_addr = tcp_server_socket.accept()
  29. # 调用发送文件函数
  30. send_file_2_client(new_client_socket, client_addr)
  31. # 关闭套接字
  32. new_client_socket.close()
  33. tcp_server_socket.close()
  34. if __name__ == '__main__':
  35. main()

【python】文件下载---基础版的更多相关文章

  1. python tkinter实现俄罗斯方块 基础版

    本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...

  2. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...

  3. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  4. Python数据分析基础PDF

    Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...

  5. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  6. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  7. [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)

    [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...

  8. 01 基础版web框架

    01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...

  9. 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料

    像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介  · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ...

随机推荐

  1. 爬虫数据提取之JSON与JsonPATH

    数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适 ...

  2. CentOS使用yum安装最新版nginx步骤

    sudo yum install yum-utilsvi  /etc/yum.repos.d/nginx.repo 输入: [nginx-stable]name=nginx stable repoba ...

  3. java中为什么notify()可能会导致死锁,而notifyAll()则不会

    简单的说,notify()只唤醒一个正在等待的线程,当该线程执行完以后施放该对象的锁,而没有再次执行notify()方法,则其它正在等待的线程 则一直处于等待状态,不会被唤醒而进入该对象的锁的竞争池, ...

  4. Nginx打印json日志

    1.修改配置,在http{}中添加 log_format access_json '{"@timestamp":"$time_iso8601",' '" ...

  5. 配置windows live writer

    下载地址 https://pan.baidu.com/s/1WVpLQEadIHN15W2DIhWh4A 安装流程参考博客 https://www.cnblogs.com/haseo/p/376232 ...

  6. IntelliJ IDEA(2018.3.5) 设置编码为utf-8编码

    位置一: File->Settings->Editor->File Encodings   位置二: File->Other Settings->Default Sett ...

  7. 【并行计算-CUDA开发】GPU并行编程方法

    转载自:http://blog.sina.com.cn/s/blog_a43b3cf2010157ph.html 编写利用GPU加速的并行程序有多种方法,归纳起来有三种: 1.      利用现有的G ...

  8. Vim 入门

    Vim 简介 打开 Vim的四种模式 一些命令 插入 移动 文件 编辑 环境设置 .vimrc 更多命令 环境设置 折叠 显示 Vim 简介 Vim 是字符模式下的一种文本编辑器,不需要图形界面,它是 ...

  9. 测试代码的练习2——python编程从入门到实践

    11-3 雇员:编写一个名为Employee的类,其方法__init__() 接受名.姓和年薪,并将它们都存储在属性中.编写一个名为give_raise()的方法,它默认将年薪增加5000美元,但也能 ...

  10. HTTP: Request中的post和get区别

    * GET和POST之间的主要区别 1.GET是从服务器上获取数据,POST是向服务器传送数据. 2.在客户端, get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段 ...