{每日一题}:tcp协议实现简单的文件下载器(单任务版)
文件下载器客户端
这个版本的只是为了方便回顾一下TCP客服端,服务端的创建流程,缺点就是 服务器一次只能让一个人访问下载,过两个写个使用面向对象写一个多线程版的强化一下.
from socket import * def mian():
# 1. 创建套接字
tcp_client_scoket = socket(AF_INET,SOCK_STREAM) # 2.连接本地服务器
tcp_client_scoket.connect(('192.168.0.117',8889)) # 3.输入要下载的文件名
file_name = input('请输入要下载的文件名:')
tcp_client_scoket.send(file_name.encode()) # 4.接收传过来的文件内容
data = tcp_client_scoket.recv(1024*1024*1024)
print(data) # 5.写入本地
if data:
with open('/home/python/Desktop/' + file_name,'wb') as f:
f.write(data) tcp_client_scoket.close() if __name__ == '__main__':
mian()
文件下载器服务端
from socket import * def get_file_name(file_name):
"""获取文件内容"""
try:
with open('/home/python/Desktop/test/'+file_name,'rb') as f:
content = f.read()
return content
except:
print('无此文件') # 会返回一个空值 def main():
# 1.创建服务器的tcp套接字
tcp_serve_socket = socket(AF_INET,SOCK_STREAM) # 2.端口复用
tcp_serve_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,True) # 3.绑定服务器端口
tcp_serve_socket.bind(('',8889)) # 4.开始监听
tcp_serve_socket.listen(5) while True:
new_socket,client_addr = tcp_serve_socket.accept()
print("来自%s的下载请求" % str(client_addr)) # 5.接收来自服务端的文件名
file_data = new_socket.recv(1024)
file_name = file_data.decode() # 6.查找是否有此文件并写出
content = get_file_name(file_name) # 7. 发送文件内容
if content:
new_socket.send(content)
print('发送成功') #8.关闭new_socket套接字
new_socket.close() tcp_serve_socket.close() if __name__ == '__main__':
main()
如果你和我有共同爱好,我们可以加个好友一起交流!

{每日一题}:tcp协议实现简单的文件下载器(单任务版)的更多相关文章
- python使用tcp实现一个简单的下载器
上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- http协议跟tcp协议的简单理解
在说明这两个协议之前,我们先简单说一下网络的分层. 1)应用层 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信.主要的协议有:http.ftp.te ...
- python3实现TCP协议的简单服务器和客户端
利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作 ...
- TCP协议的简单应用一
TCP协议的应用,实现一个服务器处理多个客户端请求(向服务器发送消息,服务器接收到后以原消息返回给客户端.) 客户端类 import java.io.*; import java.net.Socket ...
- tcp协议的简单理解
tpc协议属于传输层协议,本篇主要介绍下几个概念,以及握手和挥手的过程. 1.tcp的几个概念 位码:即tcp标志位,有6种提示 SYN:synchronus,表示建立联机. ACK:acknowle ...
- <每日一题>题目21:简单的python练习题(21-30)
#21.cookie和session的区别 ''' 1.cookie数据存放在客户的浏览器上,session数据存放在服务器上 2.cookie不是很安全,可以通过分析本地cookie组成伪造cook ...
- <每日一题>题目22:简单的python练习题(31-40)
#31.分布式爬虫主要解决什么问题? ''' ip 带宽 CPU IO ''' #32.网络传输层 ''' 应用层—http ftp dns nfs 传输层—tcp --udp 网络层—ip icmp ...
- <每日一题>题目20:简单python练习题(11-20)
#11.编写程序,输入一个自然数,输出它的二进制.八进制.十六进制表示形式 Num = input("请输入任性自然数:") Num = eval(Num) print(" ...
随机推荐
- Windows Docker 部署 Spring Boot 项目
目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...
- [Leetcode] 第357题 计算各个位数不同的数字个数
一.题目描述 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11,22,33,44,55, ...
- BASLER Pylon 抓取策略
BASLER Pylon 抓取策略 ( 涛哥工业技术 微信号 TaoRobotics) One by One Grab Strategy 逐个抓取策略 当使用 one by one 抓取模式时,图像按 ...
- 使Flask的url支持正则表达式以及一个api小demo
from flask import Flask from flask import jsonify from flask import request from werkzeug.routing im ...
- 关于webpack
webpack 是一个模块打包器,能够把所有的文件都当做是一个模块 它把所有的文件资源(js,json,css,sass,图片)都看作为模块 将这些文件资源解析处理以后,生成对应的打包文件 使用web ...
- Android Studio [页面的跳转和传值]
AActivity.java package com.xdw.a122.jump; import android.app.Activity; import android.content.Compon ...
- 使用Espresso测试记录
准备工作 建立测试项目 添加测试依赖 编写Espresso测试 运行测试并检查测试结果 建立测试项目 使用Android Studio建立测试项目,Activity模版使用 LoginActivity ...
- linux服务器创建虚拟路径解决文件上传路径隔离问题
需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...
- java8 base64使用
java 1.8中引入了Base64,不在需要引入第三方库就可以使用base64了. 在需要用到base64进行加密解密的时候就可以使用了 String text = "base64 in ...
- Spring Cloud 全链路追踪实现
简介 在微服务架构下存在多个服务之间的相互调用,当某个请求变慢或不可用时,我们如何快速定位服务故障点呢?链路追踪的实现就是为了解决这一问题,本文采用Sleuth+Zipkin+RabbitMQ+ES+ ...