python-局域网内实现web页面用户端下载文件,easy!
好久没有发博客了,但是也没闲着,最近疫情原因一直在家远程办公,分享一下今天的干货
先说需求:某个文件压缩之后可以供用户点击下载
没想到特别好的办法,在网上搜索大多都是通过socket实现的,然后我这个好久没写服务端和客户端的家伙开始了奋笔疾书,使劲粘贴,源码附上:
注意!!!启动时:先服务端,后客户端。 关闭时:先客户端后服务端
ps: 说明一下,服务端客户端端口应一致,因为我搞的时候有不正常释放端口的异常,所以频繁切换端口,最后往博客粘的时候出现了不一致端口,想要修改一下的,可是压缩起来的代码编辑时候是点不开的,就很愁哈哈不改了
服务端code:
import socket
import os
def serverSide(): # 在这里我将os.path的默认路径进行了更改,改到了/mnt/,从/mnt/路径下找文件下载
os.chdir("/mnt/")
print(os.getcwd())
# 创建tcp服务端套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定端口号,ip地址不绑定
tcp_server_socket.bind(("127.0.0.1", 3344)) # 程序结束,释放端口号,端口号复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 设置监听,把主动套接字变成被动套接字,服务端套接字只负责接收客户端的连接请求
tcp_server_socket.listen(128) while True:
# 创建信的套接字,等待接收客户端的连接请求
# clientSide() service_client_socket, ip_port = tcp_server_socket.accept() print("客户端连接成功了:", ip_port) # 接收客户端的请求信息
file_name_data = service_client_socket.recv(1024)
print(file_name_data) # 对二进制数据进行解码
file_name = file_name_data.decode("utf-8")
print(file_name) # 判断文件是否存在
if os.path.exists(file_name): # 文件存在
with open(file_name, "rb") as file:
# 读取文件数据
while True:
# 循环读取文件数据
file_data = file.read(1024)
# 表示读到数据
if file_data:
# 然后把数据发送给客户端
service_client_socket.send(file_data)
else:
print("请求的文件数据发送完成")
break else:
print("您请求下载的文件不存在") # 终止和这个客户端服务
service_client_socket.close()
# 终止客户端连接请求服务, 服务端的套接字可以不用关闭
tcp_server_socket.close() if __name__ == '__main__':
serverSide()
客户端code:
import socket def clientSide():
# serverSide()
# 创建套接字,AF_INET:ipv4,SOCK_STREAM:TCP协议
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 和服务端连接
tcp_client_socket.connect(("127.0.0.1", 3357))
# 发送下载文件的请求
file_name = input("请输入要下载的文件名:")
# 个人在服务端和客户端都采用utf-8编码
file_name_data = file_name.encode("utf-8")
# 发送请求数据
tcp_client_socket.send(file_name_data)
# 把数据写入到文件里
with open('/mnt/' + file_name, "wb") as file:
while True:
# 循环接收文件数据
file_data = tcp_client_socket.recv(1024)
# 只要接收到数据,就写入
if file_data:
file.write(file_data)
print('====')
else:
print("服务端把数据发送完成并关闭了连接")
break
# 关闭套接字
tcp_client_socket.close() if __name__ == '__main__':
clientSide()
在把它放到项目中去应用的时候发现每次断开服务之后端口都不能正常释放,所以下一次再调用的时候就是端口占用啦,能耐不够没有解决
在下又在网上一通翻找,分享一个python的方法,可以实现局域网内目录文件共享,妙哉。
python2和python3皆可实现
1、首先进入你要共享的路径,比如:
cd /data/
2、开启共享服务(默认端口是8000,因为我Django项目,避免冲突,手动8888)
# python2
python -m SimpleHTTPServer 8888 # 或者python3
python -m http.server 8888
3、访问页面: 开启服务的IP+端口8888,例如:192.168.1.165:8888即可访问/data/目录下的文件,并支持下载
=======================================分割线=================================================
开启后台运行模式
# 当前终端后台运行
python -m SimpleHTTPServer 8888 & # 完全后台运行
nohup python -m SimpleHTTPServer 8888 &
好了,大功告成,差一张成功展示的截图,今天VPN已经没连了,改日再议吧!
最后,天佑中华!世界和平!武汉加油!中国加油
python-局域网内实现web页面用户端下载文件,easy!的更多相关文章
- QUICK-AP + BETTERCAP 替换局域网内其他用户的下载文件为自定义文件
环境需求 :kali系统 , .0版本 :quick-ap :bettercap :bettercap-proxy-modules :...... 主要环境搭建 目的:替换局域网用户的下载文件,变为我 ...
- 通过Java WebService接口从服务端下载文件
一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的 ...
- Python 实现批量从不同的Linux服务器下载文件
基于Python实现批量从不同的Linux服务器下载文件 by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/file_for_downl ...
- java实现从服务端下载文件
这边用一个简单的servlet实现java从服务端下载文件的操作 写一个servlet: <servlet> <servlet-name>DownloadServlet< ...
- java web service 上传下载文件
1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...
- python+socket+jq实现web页面实时输出结果
例如有这样一个需求: 在终端上进行ping操作,现在想把这个这个操作放到web页面上进行,并且实现实时输出的效果. 来分析下具体实现过程 第一步,传统的http请求实现这个有点不太友好,因为这里边是一 ...
- 使用python在WEB页面上生成EXCEL文件
来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...
- Python爬虫 爬取Web页面图片
从网页页面上批量下载jpg格式图片,并按照数字递增命名保存到指定的文件夹 Web地址:http://news.weather.com.cn/2017/12/2812347.shtml 打开网页,点击F ...
- 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)
应项目需求要把PDF内嵌到网页中显示,其中有了很多办法,比如用<embed/>元素放入PDF文件,但是效果不理想,浏览器兼容不理想,在ie9/8(其他版本没有测试)显示会提示下载pdf文件 ...
随机推荐
- 082、Java数组之数组传递之简化理解
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- SSH框架与SSI框架的区别
2013-03-04 13:45 1427人阅读 评论(0) 收藏 举报 一.SSH 整个配置如下图所示: 1. <?xml version="1.0" encoding=& ...
- ls查看所有文件
ls -al 查看所有文件,包括隐藏文件
- SpringBoot-集成通用mapper
SpringBoot-集成通用mapper SpringBoot-集成通用mapper 我们在SpringBoot中整合了MyBatis,但是大量重复的增删改查还是很头疼的问题,MyBatis也给 ...
- 17 Resources AssetBundle资源打包
Resources在Unity中可以使用www类加载远程文件或本地文件,或是在脚本中定义字段或数组从外部拖入. 在Unity中提供了Resources类读取资源要通过Resources类读取的文件必须 ...
- 吴裕雄--天生自然java开发常用类库学习笔记:日期操作类DataFormat、SimpleDataFormat
import java.text.DateFormat ; import java.util.Date ; public class DateDemo03{ public static void ma ...
- P1048 数字加密
P1048 数字加密 转跳点:
- 2的n次幂
位运算判断2的n次幂: 举个栗子,n = 8:则二进制表示就为1000,n-1则为 0111 取&刚好等于0 嘿嘿,巧妙吧. 再举个栗子,n = 7: 则二进制为 0111,n-1则为0110 ...
- POJ 2796:Feel Good 单调栈经典题
Feel Good Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 11626 Accepted: 3212 Case T ...
- scala文件通过本地命令运行
1.准备(检查) a.本地环境安装jdk b.安装scala 2.sublime编辑scala文件,并存放到F:\plan_next\scala_compile下 3.文件目录中切换到cmd中(文件目 ...