【python】文件下载---基础版
基于TCP协议的基础版本,不支持大文件
Client.py
import socket
def main():
# 1. 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 获取服务器的ip port
# dest_ip = input("请输入下载服务器的IP:")
# dest_port = int(input("请输入下载服务器的Port:"))
# 3. 链接服务器
# tcp_socket.connect((dest_ip, dest_port))
tcp_socket.connect(('127.0.0.1', 7890))
# 4. 获取下载的文件名字
download_file_name = input("请输入要下载的文件名字: ")
# 5. 将文件名字发送到服务器
tcp_socket.send(download_file_name.encode('utf-8'))
# 6. 接收文件中的数据
recv_data = tcp_socket.recv(1024) # 1024--->1k
# 7. 保存接收到的数据到文件中
if recv_data:
with open("[新]"+download_file_name,"wb") as f:
f.write(recv_data)
# 8. 关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
Server.py
import socket
def send_file_2_client(new_client_socket, client_addr):
# 1. 接收客户端发送过来的,要下载的文件名
file_name = new_client_socket.recv(1024).decode('utf-8')
print("客户端[%s]需要下载的文件是:%s" % (str(client_addr), file_name))
file_content = None
# 2. 打开这个文件,读取数据
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有要下载的文件[%s]" % file_name)
# 3. 发送文件的数据给客户端
# new_client_socket.send("hahahah".encode('utf-8')) # 调试的时候,先给发个假得
if file_content:
new_client_socket.send(file_content)
def main():
# 1. 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 创建监听
tcp_server_socket.bind(("", 7890))
# 3. 套接字被动监听数量
tcp_server_socket.listen(128)
while True:
print("wait...")
# 获取客户端socket,客户端连接信息
new_client_socket, client_addr = tcp_server_socket.accept()
# 调用发送文件函数
send_file_2_client(new_client_socket, client_addr)
# 关闭套接字
new_client_socket.close()
tcp_server_socket.close()
if __name__ == '__main__':
main()
【python】文件下载---基础版的更多相关文章
- python tkinter实现俄罗斯方块 基础版
本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...
- 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
- Python数据分析基础PDF
Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...
- (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md
第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)
[Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...
- 01 基础版web框架
01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...
- 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料
像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介 · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ...
随机推荐
- 两行命令查看自己笔记本连接的wifi密码
打开cmd.exe窗口 第一行命令 netsh wlan show profiles 可以查看所有曾经连接过的wifi 第二命令 netsh wlan show profiles "vivo ...
- label vc
#pragma once #include <QWidget> #include <QPaintEvent> #include <QPainter> #includ ...
- Session丢失的原因及解决办法
Asp.net 默认配置下,Session莫名丢失的原因及解决办法: 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定 ...
- Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) 解决办法
1:我遇到的问题: 在开机运行apt install vim 命令的时候,如下报错: 2:参考博客: 在Ubuntu中,有时候运用sudo apt-get install 安装软件时,会出现一下的情 ...
- ssh_exchange_identification: read: Connection reset by peer 解决思路
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Jdk_yxs/article/deta ...
- ubantu系统安装ssh
ssh连接ubantu系统 描述:新安装的ubantu系统,ssh连接发现22端口拒绝,登陆服务器发现没有ssh 1.安装ssh服务 apt-get install openssh-server 报错 ...
- hbase 安装(集群模式)
环境:jdk 1.8 + hadoop2.7.6+zookeeper3.4.9+centos7 一.安装zookeeper(集群模式) 0.安装机器 ip ...
- csu 1976: 搬运工小明
1976: 搬运工小明 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 94 ...
- XGBoost 原理及应用
xgboost原理及应用--转 1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost ...
- Cannot get a STRING value from a NUMERIC cell问题的解决办法
遇到以下错误的解决办法: 在cell加个setCellType()方法就可以了 cell.setCellType(CellType.STRING);