tcp案例之文件下载器
文件下载器客户端
import socket def main():
# 1.创建一个tcp socket
tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2. 连接服务端
tcp_client_socket.connect(('127.0.0.1',9999)) #3. 获取用户输入的文件名
file_name=input("请输入要下载的文件名:") # 4. 把要下载的文件名发给服务端
tcp_client_socket.send(file_name.encode()) #5. 等待接收服务端回传的文件内容
recv_data=tcp_client_socket.recv(1024*1024) # 一次最多接收1M字节
print(recv_data) #6. 假如内容不为空,则写入到文件中
if recv_data:
with open("/home/python/Desktop/"+file_name,"wb") as f:
f.write(recv_data) #7. 关闭tcp socket
tcp_client_socket.close() if __name__ == '__main__':
main()
文件下载器服务端
import socket def get_file_content(file_name):
"""通过文件名取得文件内容"""
try:
# 打开文件,读取数据 www.png
file=open(file_name,"rb")
content=file.read()
file.close()
return content
except:
print("%s下载的文件找不到"%file_name) def main():
# 1. 创建服务端的socket,用来做监听的
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 复用端口
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) # 2. 绑定端口
server_socket.bind(('',9999)) # 3. 开启监听 listen
server_socket.listen(5) # 4. 循环接收客户端的下载请求
while True:
new_sock,client_addr=server_socket.accept()
print("有新的下载请求,来自-->",client_addr) #5. 获取客户端发送过来的要下载的文件名
recv_data=new_sock.recv(1024) # 取得要下载的文件名
# 把字节串转为字符串
file_name=recv_data.decode() # 6.通过函数取得要下载的文件的内容
file_content=get_file_content(file_name) # 7. 把内容回传给客户端
if file_content:
new_sock.send(file_content) # 8. 关闭与客户端对接的socket
new_sock.close()
#9. 关闭服务端server_socket,不再接收新的下载文件的请求
server_socket.close() if __name__ == '__main__':
main()
tcp案例之文件下载器的更多相关文章
- 使用网络TCP搭建一个简单文件下载器
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...
- {每日一题}:tcp协议实现简单的文件下载器(单任务版)
文件下载器客户端 这个版本的只是为了方便回顾一下TCP客服端,服务端的创建流程,缺点就是 服务器一次只能让一个人访问下载,过两个写个使用面向对象写一个多线程版的强化一下. from socket i ...
- python实现tcp文件下载器
服务器端代码 import socket import os import threading # 处理客户端请求下载文件的操作(从主线程提出来的代码) def deal_client_request ...
- Unity3D 更新文件下载器
使用说明: 1)远端更新服务器目录 Package |----list.txt |----a.bundle |----b.bundle 2)list.txt是更新列表文件 格式是 a.bundle|r ...
- QT--HTTP文件下载器
QT--HTTP文件下载器 1.pro文件添加 QT += core gui network 2.头文件 #include <QNetworkAccessManager> #i ...
- 洗礼灵魂,修炼python(29)--装饰器(1)—>利用经典案例解析装饰器概念
前提必备 不急着进入正题,在前面函数作用域那一章介绍了闭包,全局变量局部变量,这里再看几个简单的闭包案例: 1):不带参数 注意: 1.这里的name属性是每个函数都有的,可以反馈函数名 2.temp ...
- SpringBoot开发案例之拦截器注入Bean
前言 由于业务需要,需要在拦截器中操作Redis缓存,按照 controller,service层配置发现无法注入,一直报空指针异常. 解决方案 @Configuration public class ...
- AIDL/IPC Android AIDL/IPC 进程通信机制——超具体解说及使用方法案例剖析(播放器)
首先引申下AIDL.什么是AIDL呢?IPC? ------ Designing a Remote Interface Using AIDL 通常情况下,我们在同一进程内会使用Binder.Broad ...
- Download Shuttle Pro mac文件下载器使用指南
Download Shuttle Pro是适用于macOS的最强大的下载管理器和加速器.它将文件下载分为多个部分,与使用Web浏览器相比,可以提高整体下载速度.使用我们的Pro版本,您可以访问我们的新 ...
随机推荐
- 洛谷 P3732 [HAOI2017]供给侧改革【trie树】
参考:http://blog.csdn.net/di4covery/article/details/73065684 我以为是后缀数组+某某数据结构,结果居然是01trie!!题解说"因为是 ...
- Centos 7 chrome
share from https://www.cnblogs.com/lenmom/p/9195581.html 1. 下载Chrome浏览器的rpm包 https://www.chrome64bit ...
- 【原创】《从0开始学Elasticsearch》—集群健康和索引管理
内容目录 1.搭建Kibana2.集群健康3.索引操作 1.搭建Kibana 正如<Kibana 用户手册>中所介绍,Kibana 是一款开源的数据分析和可视化平台,因此我们可以借助 Ki ...
- 51nod 1213 二维曼哈顿距离最小生成树
1213 二维曼哈顿距离最小生成树 基准时间限制:4 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间 ...
- Triangular Pastures POJ - 1948
Triangular Pastures POJ - 1948 sum表示木条的总长.a[i]表示第i根木条长度.ans[i][j][k]表示用前i条木条,摆成两条长度分别为j和k的边是否可能. 那么a ...
- Android Dialogs(3)警示Dialog教程[创建,单选,复选,自定义]等等
本节内容 1. Building an Alert Dialog 2. Adding buttons 3. Adding a list 4. Adding a persistent multiple- ...
- JMeter(十三)进行简单的数据库(mysql)压力测试
1.点击测试计划,再点击“浏览”,把JDBC驱动添加进来: 注:JDBC驱动一般的位置在java的安装地址下,路径类似于: \java\jre\lib\ext 文件为:mysql-connect ...
- 446 Arithmetic Slices II - Subsequence 算数切片之二 - 子序列
详见:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/description/ C++: class Solution { ...
- C#控件置于底层或顶层
btn.BringToFront();//置于顶层 btn.SendToBack();//置于底层
- svn 使用手册
版本控制器:SVN 1 开发中的实际问题 1.1 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流——需求之一:备份! 1.2 这个项目 ...