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版本,您可以访问我们的新 ...
随机推荐
- 搭建CARDBOARD+ANDROID+unity3d的VR开发环境
一.下载最新unity3d(u3d官网) 二.下载最新cardboardsdkforunity(https://github.com/googlesamples/cardboard-unity) 三. ...
- 真正认识 realloc 的工作方式(转载)
转自:http://www.cnblogs.com/ren54/archive/2008/11/20/1337545.html realloc 用过很多次了.无非就是将已经存在的一块内存扩大. cha ...
- mybatis基础学习4-插件生成器(根据数据库的表生成文件)
1:安装(根据数据库的表生成文件) 2:在所建项目单击右键输入mybatis如下图 *建项目文件时不用建包和类,插件可以根据数据表自动生成,在配置文件(generatorConfig.xml)里写即可 ...
- Rabbitmq笔记二
消息何去何从 mandatory 和 immediate 是 channel . basicPublish 方法中的两个参数,它们都有 当消息传递过程中不可达目的地时将消息返回给生产者的功能. 当 m ...
- 【css】rem及其替换方案
移动端的web前端开发其实经常会有一些令人头疼的问题,比如屏幕适配.1像素问题等,rem也是之前在屏幕适配上比较完善的一套方案,但是随着业务的深入,任何方案都有其优秀与不足的地方,rem这套方案也一样 ...
- 题解报告:CODE[VS] 1082 线段树练习3(区间修改+区间查询)
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
- C#中的预编译指令介绍[转]
原文链接 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值 ...
- oracle (DBaaS) 服务介绍
转 https://oracle-base.com/articles/vm/oracle-cloud-database-as-a-service-dbaas-create-service?utm_so ...
- 移动端UI自动化Appium测试——Windows系统Appium环境配置
1.安装JDK,官网下载即可,这里用的1.8,环境变量配置 2.安装Android sdk,API >= 17,环境变量配置 3.安装Nodejs,官网http://nodejs.org/dow ...
- jquery + ajax 实现多条件查询
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JquerySort.aspx. ...