文件服务器 测试,python-文件服务器测试
0x01 思路
使用tcp协议传输文件
json解析二进制的时候,有问题, 不建议使用,推荐 pickle
0x02 代码
服务器端
# 测试文件服务器
# 实现文件的上传和下载
import socket
import os
import json
import pickle
sk = socket.socket()
sk.bind(("127.0.0.1",10051))
sk.listen()
#等待连接
conn,addr = sk.accept()
while True:
if getattr(conn,'_closed'):
conn, addr = sk.accept()
msg_get = conn.recv(109600)
#msg_get_str = msg_get.decode('utf-8')
#msg_info = json.loads(msg_get_str)
#msg_choice = msg_info["choice"]
msg_info = pickle.loads(msg_get)
msg_choice = msg_info["choice"]
# 1 列文件
# 2 下载文件
# 3 上传文件
spec_file_path = os.path.dirname(__file__) + "/" + "files"
file_lists = os.listdir(spec_file_path)
if msg_choice == '1':
#列目录
file_list_str = pickle.dumps(file_lists)
conn.send(file_list_str)
elif msg_choice == '2':
# 下载文件
# 需要输入下载的文件名
file_name = msg_info["file_name"]
if file_name in file_lists:
# 下载操作
file_name_path = spec_file_path+"/"+file_name
with open(file_name_path,"rb") as f:
filebytes = f.read()
#conn.send(filebytes.encode("utf-8"))
conn.send(filebytes)
else:
conn.send("没有可以下载的文件".encode("utf-8"))
elif msg_choice == '3':
# 上传文件,禁止覆盖
file_name = msg_info["file_name"]
file_content = msg_info['file_content']
#file_content = str.encode(file_content_str)
if file_name in file_lists:
conn.send("已存在该文件,禁止覆盖".encode("utf-8"))
else:
file_name_path = spec_file_path + "/" + file_name
with open(file_name_path,"wb") as f:
# 获取字节流
f.write(file_content)
continue_str = input("是否继续 Y or N?")
if continue_str=='N':
break
sk.close()
客户端:
# 上传文件客户端
import socket
import os
import json
import pickle
sk = socket.socket()
sk.connect(("127.0.0.1",10051))
user_choice={"1":"查看服务器的文件","2":"下载文件","3":"上传文件"}
for k,v in user_choice.items():
print(k,v)
spec_file_path = os.path.dirname(__file__) + "/" + "upload_files"
file_lists = os.listdir(spec_file_path)
while 1:
choice_str = input("请输入你的选择:")
if choice_str=='1':
# 列目录
dict_str = {"choice":"1"}
send_str = pickle.dumps(dict_str);
sk.send(send_str)
msg_str = sk.recv(1024)
#pickle.loads(msg_str)
print(pickle.loads(msg_str))
elif choice_str=='2':
# 下载文件
file_name = input("请输入文件名:")
dict_str = {"choice": "2","file_name":file_name}
send_str = pickle.dumps(dict_str);
sk.send(send_str)
# 接收文件
file_content = sk.recv(109600)
file_name_path = spec_file_path + "/" + file_name
with open(file_name_path, "wb") as f:
# 获取字节流
f.write(file_content)
elif choice_str=='3':
# 上传文件
file_name = input("请输入文件名:")
file_name_path = spec_file_path + "/" + file_name
if file_name in file_lists:
with open(file_name_path, "rb") as f:
# 获取字节流
file_content = f.read()
dict_str = {"choice": "3", "file_name": file_name,"file_content":file_content}
#send_str = json.dumps(dict_str);
send_str = pickle.dumps(dict_str)
# 上传文件
sk.send(send_str)
else:
print("选择的文件不存在")
else:
print("对不起,选择失败!")
sk.close()
文件服务器 测试,python-文件服务器测试相关推荐
- python乘法表代码注释_Python统计python文件中代码,注释及空白对应的行数示例【测试可用】...
本文实例讲述了Python实现统计python文件中代码,注释及空白对应的行数.分享给大家供大家参考,具体如下: 其实代码和空白行很好统计,难点是注释行 python中的注释分为以#开头的单行注释 或 ...
- 【python中级】 FastDFS删除文件服务器上的文件
[python中级] FastDFS删除文件服务器上的文件 1.背景 2.使用示例 3.删除验证 1.背景 将文件上传至FastDFS文件服务器可以参考: [python中级] FastDFS通过bu ...
- 关于python文件读写小结
读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...
- (原创)Python文件与文件系统系列(5)——stat模块
stat模块中定义了许多的常量和函数,可以帮助解释 os.stat().os.fstat().os.lstat()等函数返回的 st_result 类型的对象. 通常使用 os.path.is*() ...
- python文件信息排序_python文件排序的方法总结
在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...
- python读取txt文件乱码-python文件乱码
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 原文地址:http:www.zisexinghen.cnlikeshare322. ...
- php python-浅谈php调用python文件
关于PHP调用Python数据传输问题 这是以前大学时做项目出现的问题,现在把它挪上来,希望给遇到问题的未来大佬给出一些小的思路,请大佬们不要大意的帮我改正,如果出现问题或者有更好的解决方法,希望大家 ...
- python 文件读写找不到文件-python之文件读写
本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...
- Python文件处理
Python文件处理 Python文件处理 在python中,要对一个文件进行操作,得把文件抽象为Streams流或者说file object或者叫file-like objects. 这样将文件当作 ...
- Python文件操作学习总结
Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...
最新文章
- OPNET仿真zigbee
- ITK:创建一个向量
- 网络技巧:WiFi越用越慢,到底是什么原因,看完你就明白了!
- Cloudera Manager 术语和架构
- arcgis 属性表 汇总_ArcGIS之属性表编辑与字段添加
- 处女座的期末复习-贪心
- 立创商城的元件原理图怎么弄到ad_(50条消息)立创EDA元件封装导入AD软件教程
- 目标导向型思维, 利他思维,迭代思维, 用忙碌打败无聊,整合型思维 重视运动
- 小米平板4刷recovery教程_小米平板2中文Recovery刷机教程
- android手机设置查看电池耗电,安卓查看电池损耗代码【搞定指南】
- 修一座安全的广厦,庇护赛博世界的流浪者
- win10打不开开始菜单的解决方法
- [流媒体]实例解析MMS流媒体协议,下载LiveMediaVideo[1][修正版,增加了带宽测试包]
- MySql学习笔记(2)--数据库操作及数据管理
- android增量编译,GitHub - brok1n/androidBsdiffUpdate: Android增量更新项目源代码。带C源程序以及ndk编译好的so包。可以直接导出使用。...
- Sqlserver修改表结构提示不允许保存更改。
- 与计算机硬件关系最密切的软件是A,计算机应用基础试卷A1112_2.doc
- PAT(BASIC)1037. 在霍格沃茨找零钱(20)
- java零钱换整程序_零钱兑换 Java
- 谈谈对摩尔定理的理解及其当前是否继续有效
热门文章
- 云计算计算机二级,2021计算机二级office用的是哪个版本
- oracle 12c sp2 0667,关于数据库安装的问题SP2-0667: Message file sp1.msb not found
- 安装MySQL出现 Install/Remove of the Service Denied!
- 安徽工业大学java实验报告_安徽工业大学java实验报告.doc
- Scikit-Learn (浅谈PCA降维算法)
- python 客户端_Python客户端
- dos系统功能调用的屏幕显示字符是( )号调用_linux混杂设备驱动模型分析(字符设备驱动模型使用篇)...
- 【clion】自定义优美的代码配色(主题)
- ue 新建html,第四课 开发uehtml官网响应式静态页面(示例代码)
- 人机协作机器人发展趋势_人工智能非万能!智能安防机器人下一站:人机协作...