文件下载器客户端

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案例之文件下载器的更多相关文章

  1. 使用网络TCP搭建一个简单文件下载器

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...

  2. {每日一题}:tcp协议实现简单的文件下载器(单任务版)

    文件下载器客户端 这个版本的只是为了方便回顾一下TCP客服端,服务端的创建流程,缺点就是  服务器一次只能让一个人访问下载,过两个写个使用面向对象写一个多线程版的强化一下. from socket i ...

  3. python实现tcp文件下载器

    服务器端代码 import socket import os import threading # 处理客户端请求下载文件的操作(从主线程提出来的代码) def deal_client_request ...

  4. Unity3D 更新文件下载器

    使用说明: 1)远端更新服务器目录 Package |----list.txt |----a.bundle |----b.bundle 2)list.txt是更新列表文件 格式是 a.bundle|r ...

  5. QT--HTTP文件下载器

    QT--HTTP文件下载器 1.pro文件添加 QT       += core gui network 2.头文件 #include <QNetworkAccessManager> #i ...

  6. 洗礼灵魂,修炼python(29)--装饰器(1)—>利用经典案例解析装饰器概念

    前提必备 不急着进入正题,在前面函数作用域那一章介绍了闭包,全局变量局部变量,这里再看几个简单的闭包案例: 1):不带参数 注意: 1.这里的name属性是每个函数都有的,可以反馈函数名 2.temp ...

  7. SpringBoot开发案例之拦截器注入Bean

    前言 由于业务需要,需要在拦截器中操作Redis缓存,按照 controller,service层配置发现无法注入,一直报空指针异常. 解决方案 @Configuration public class ...

  8. AIDL/IPC Android AIDL/IPC 进程通信机制——超具体解说及使用方法案例剖析(播放器)

    首先引申下AIDL.什么是AIDL呢?IPC? ------ Designing a Remote Interface Using AIDL 通常情况下,我们在同一进程内会使用Binder.Broad ...

  9. Download Shuttle Pro mac文件下载器使用指南

    Download Shuttle Pro是适用于macOS的最强大的下载管理器和加速器.它将文件下载分为多个部分,与使用Web浏览器相比,可以提高整体下载速度.使用我们的Pro版本,您可以访问我们的新 ...

随机推荐

  1. Unix\Linux | 总结笔记 | 邮件发送

    实验:在本地实现不同用户收发邮件 #root发送邮件 #stu 收邮件 #stu 查看邮件 并回复邮件 #root 查看stu回复的邮件

  2. 【BZOJ3309】DZY Loves Math(线性筛)

    题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...

  3. 2017 JUST Programming Contest 3.0 H. Eyad and Math

    H. Eyad and Math time limit per test 2.0 s memory limit per test 256 MB input standard input output ...

  4. 利用Marshal.AllocHGlobal申请非托管内存,unsafe代码

    unsafe public class RUN { int[] array3; IntPtr handle; ; public RUN() { handleCount = * ; handle = S ...

  5. 转】Spark SQL 之 DataFrame

    原博文出自于: http://www.cnblogs.com/BYRans/p/5003029.html 感谢! Spark SQL 之 DataFrame 转载请注明出处:http://www.cn ...

  6. ubu下编译安装php7

    第一步: 安装依赖库zlib.libpng.freetype.jpegsrc.libxml2.libgd.freetds.mhash.libmcrypt.mcrypt(依赖于mhash和libmcry ...

  7. swiper4实现的拥有header和footer的全屏滚动demo/swiper fullpage footer

    用swiper4实现的拥有header和footer的全屏滚动demo, <!DOCTYPE html> <html lang="en"> <head ...

  8. Shiro 自定义登陆、授权、拦截器

    Shiro 登陆.授权.拦截 按钮权限控制 一.目标 Maven+Spring+shiro 自定义登陆.授权 自定义拦截器 加载数据库资源构建拦截链 使用总结: 1.需要设计的数据库:用户.角色.权限 ...

  9. spark shuffle:分区原理及相关的疑问

    一.分区原理 1.为什么要分区?(这个借用别人的一段话来阐述.) 为了减少网络传输,需要增加cpu计算负载.数据分区,在分布式集群里,网络通信的代价很大,减少网络传输可以极大提升性能.mapreduc ...

  10. Redis缓存Object,List对象

    一.到目前为止(jedis-2.2.0.jar),在Jedis中其实并没有提供这样的API对对象,或者是List对象的直接缓存,即并没有如下类似的API jedis.set(String key, O ...