好久没有发博客了,但是也没闲着,最近疫情原因一直在家远程办公,分享一下今天的干货

先说需求:某个文件压缩之后可以供用户点击下载

没想到特别好的办法,在网上搜索大多都是通过socket实现的,然后我这个好久没写服务端和客户端的家伙开始了奋笔疾书,使劲粘贴,源码附上:

注意!!!启动时:先服务端,后客户端。 关闭时:先客户端后服务端

ps: 说明一下,服务端客户端端口应一致,因为我搞的时候有不正常释放端口的异常,所以频繁切换端口,最后往博客粘的时候出现了不一致端口,想要修改一下的,可是压缩起来的代码编辑时候是点不开的,就很愁哈哈不改了

服务端code:

  1. import socket
  2. import os
  3. def serverSide():
  4.  
  5. # 在这里我将os.path的默认路径进行了更改,改到了/mnt/,从/mnt/路径下找文件下载
  6. os.chdir("/mnt/")
  7. print(os.getcwd())
  8. # 创建tcp服务端套接字
  9. tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10.  
  11. # 绑定端口号,ip地址不绑定
  12. tcp_server_socket.bind(("127.0.0.1", 3344))
  13.  
  14. # 程序结束,释放端口号,端口号复用
  15. tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
  16.  
  17. # 设置监听,把主动套接字变成被动套接字,服务端套接字只负责接收客户端的连接请求
  18. tcp_server_socket.listen(128)
  19.  
  20. while True:
  21. # 创建信的套接字,等待接收客户端的连接请求
  22. # clientSide()
  23.  
  24. service_client_socket, ip_port = tcp_server_socket.accept()
  25.  
  26. print("客户端连接成功了:", ip_port)
  27.  
  28. # 接收客户端的请求信息
  29. file_name_data = service_client_socket.recv(1024)
  30. print(file_name_data)
  31.  
  32. # 对二进制数据进行解码
  33. file_name = file_name_data.decode("utf-8")
  34. print(file_name)
  35.  
  36. # 判断文件是否存在
  37. if os.path.exists(file_name):
  38.  
  39. # 文件存在
  40. with open(file_name, "rb") as file:
  41. # 读取文件数据
  42. while True:
  43. # 循环读取文件数据
  44. file_data = file.read(1024)
  45. # 表示读到数据
  46. if file_data:
  47. # 然后把数据发送给客户端
  48. service_client_socket.send(file_data)
  49. else:
  50. print("请求的文件数据发送完成")
  51. break
  52.  
  53. else:
  54. print("您请求下载的文件不存在")
  55.  
  56. # 终止和这个客户端服务
  57. service_client_socket.close()
  58. # 终止客户端连接请求服务, 服务端的套接字可以不用关闭
  59. tcp_server_socket.close()
  60.  
  61. if __name__ == '__main__':
  62. serverSide()

客户端code:

  1. import socket
  2.  
  3. def clientSide():
  4. # serverSide()
  5. # 创建套接字,AF_INET:ipv4,SOCK_STREAM:TCP协议
  6. tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  7. # 和服务端连接
  8. tcp_client_socket.connect(("127.0.0.1", 3357))
  9. # 发送下载文件的请求
  10. file_name = input("请输入要下载的文件名:")
  11. # 个人在服务端和客户端都采用utf-8编码
  12. file_name_data = file_name.encode("utf-8")
  13. # 发送请求数据
  14. tcp_client_socket.send(file_name_data)
  15. # 把数据写入到文件里
  16. with open('/mnt/' + file_name, "wb") as file:
  17. while True:
  18. # 循环接收文件数据
  19. file_data = tcp_client_socket.recv(1024)
  20. # 只要接收到数据,就写入
  21. if file_data:
  22. file.write(file_data)
  23. print('====')
  24. else:
  25. print("服务端把数据发送完成并关闭了连接")
  26. break
  27. # 关闭套接字
  28. tcp_client_socket.close()
  29.  
  30. if __name__ == '__main__':
  31. clientSide()

在把它放到项目中去应用的时候发现每次断开服务之后端口都不能正常释放,所以下一次再调用的时候就是端口占用啦,能耐不够没有解决

在下又在网上一通翻找,分享一个python的方法,可以实现局域网内目录文件共享,妙哉。

python2和python3皆可实现

1、首先进入你要共享的路径,比如:

  1. cd /data/

2、开启共享服务(默认端口是8000,因为我Django项目,避免冲突,手动8888)

  1. # python2
  2. python -m SimpleHTTPServer 8888
  3.  
  4. # 或者python3
  5. python -m http.server 8888

3、访问页面: 开启服务的IP+端口8888,例如:192.168.1.165:8888即可访问/data/目录下的文件,并支持下载

=======================================分割线=================================================

开启后台运行模式

  1. # 当前终端后台运行
  2. python -m SimpleHTTPServer 8888 &
  3.  
  4. # 完全后台运行
  5. nohup python -m SimpleHTTPServer 8888 &

好了,大功告成,差一张成功展示的截图,今天VPN已经没连了,改日再议吧!

最后,天佑中华!世界和平!武汉加油!中国加油

python-局域网内实现web页面用户端下载文件,easy!的更多相关文章

  1. QUICK-AP + BETTERCAP 替换局域网内其他用户的下载文件为自定义文件

    环境需求 :kali系统 , .0版本 :quick-ap :bettercap :bettercap-proxy-modules :...... 主要环境搭建 目的:替换局域网用户的下载文件,变为我 ...

  2. 通过Java WebService接口从服务端下载文件

    一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的 ...

  3. Python 实现批量从不同的Linux服务器下载文件

    基于Python实现批量从不同的Linux服务器下载文件   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/file_for_downl ...

  4. java实现从服务端下载文件

    这边用一个简单的servlet实现java从服务端下载文件的操作 写一个servlet: <servlet> <servlet-name>DownloadServlet< ...

  5. java web service 上传下载文件

    1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...

  6. python+socket+jq实现web页面实时输出结果

    例如有这样一个需求: 在终端上进行ping操作,现在想把这个这个操作放到web页面上进行,并且实现实时输出的效果. 来分析下具体实现过程 第一步,传统的http请求实现这个有点不太友好,因为这里边是一 ...

  7. 使用python在WEB页面上生成EXCEL文件

    来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...

  8. Python爬虫 爬取Web页面图片

    从网页页面上批量下载jpg格式图片,并按照数字递增命名保存到指定的文件夹 Web地址:http://news.weather.com.cn/2017/12/2812347.shtml 打开网页,点击F ...

  9. 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)

    应项目需求要把PDF内嵌到网页中显示,其中有了很多办法,比如用<embed/>元素放入PDF文件,但是效果不理想,浏览器兼容不理想,在ie9/8(其他版本没有测试)显示会提示下载pdf文件 ...

随机推荐

  1. DotNet中的继承,剖析面向对象中继承的意义

    继承是面向对象程序设计不可缺少的机制,有了继承这个东西,可以提高代码的重用,提高代码的效率,减轻代码员的负担. 面向对象三大特性:封装.继承.多态是相辅相成的.封装为了继承,限制了父类的哪些成员被子类 ...

  2. 关于pgsql 几个操作符的效率测试比较

    关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次取平均时间.测试结果:->> 效率高 5% ...

  3. Jquery选择器大全汇总

    一.选择器 1.三个基本选择器,$("#ID") .$(".className")  .$("tagName") 2.其他选择器 //htm ...

  4. 基于Python的大数据的分页模型代码

    最近在写一个cmdb系统的分页,尽管Django本身有分页的模块儿,但是还是想实现一下自己心中想的分页的一种逻辑 因为,在我们工作当中,当我们的数据量超级大的时候,其实我们每次分页查询都不必将所有的数 ...

  5. 利用pandas,处理每天的点名。。

    学以致用,,最近的疫情,导致每天都要向学校汇报班上同学的情况,可是每次提交的人总是慢半拍,为了快速找出谁还没有提交检查表,利用最近学的知识,快速检查提交名单.方便你我他. 上代码: import pa ...

  6. Kubernetes v1.17.3 CentOS8 基于kuberadm安装

    1.机器配置: IP 主机名 节点类型 配置 192.168.31.32 node32 master 4核16G 192.168.31.33 node33 worker 4核16G 192.168.3 ...

  7. SQL——左连接(Left join)右连接(Right join)内连接(Inner join)

    概念(定义) ​首先还是介绍一下这三个的定义 ​Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来.结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足 ...

  8. .Net有哪些大型项目、大型网站的案例?

    .Net开发的部分知名网站案例:http://www.godaddy.com 全球最大域名注册商http://www.ips.com 环迅支付,国内最早的在线支付平台http://www.icbc.c ...

  9. Redis集群环境之linux搭建单机版

    Redis解决的问题是:作为一个缓存nosql数据库,能够支持高并发,关系型数据库是存储在磁盘中,通过io读写,而redis是存储在内存中,因此,能够实现高可用,他主要是解决数据库性能瓶颈而产生的. ...

  10. bzoj 2451 Uyuw's Concert

    裸的半平面交.感觉这些东西,纯属在考代码能力啊.. #include<cstdio> #include<algorithm> #include<cmath> #de ...