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-文件服务器测试相关推荐

  1. python乘法表代码注释_Python统计python文件中代码,注释及空白对应的行数示例【测试可用】...

    本文实例讲述了Python实现统计python文件中代码,注释及空白对应的行数.分享给大家供大家参考,具体如下: 其实代码和空白行很好统计,难点是注释行 python中的注释分为以#开头的单行注释 或 ...

  2. 【python中级】 FastDFS删除文件服务器上的文件

    [python中级] FastDFS删除文件服务器上的文件 1.背景 2.使用示例 3.删除验证 1.背景 将文件上传至FastDFS文件服务器可以参考: [python中级] FastDFS通过bu ...

  3. 关于python文件读写小结

    读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...

  4. (原创)Python文件与文件系统系列(5)——stat模块

    stat模块中定义了许多的常量和函数,可以帮助解释 os.stat().os.fstat().os.lstat()等函数返回的 st_result 类型的对象. 通常使用 os.path.is*() ...

  5. python文件信息排序_python文件排序的方法总结

    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...

  6. python读取txt文件乱码-python文件乱码

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 原文地址:http:www.zisexinghen.cnlikeshare322. ...

  7. php python-浅谈php调用python文件

    关于PHP调用Python数据传输问题 这是以前大学时做项目出现的问题,现在把它挪上来,希望给遇到问题的未来大佬给出一些小的思路,请大佬们不要大意的帮我改正,如果出现问题或者有更好的解决方法,希望大家 ...

  8. python 文件读写找不到文件-python之文件读写

    本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...

  9. Python文件处理

    Python文件处理 Python文件处理 在python中,要对一个文件进行操作,得把文件抽象为Streams流或者说file object或者叫file-like objects. 这样将文件当作 ...

  10. Python文件操作学习总结

    Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...

最新文章

  1. OPNET仿真zigbee
  2. ITK:创建一个向量
  3. 网络技巧:WiFi越用越慢,到底是什么原因,看完你就明白了!
  4. Cloudera Manager 术语和架构
  5. arcgis 属性表 汇总_ArcGIS之属性表编辑与字段添加
  6. 处女座的期末复习-贪心
  7. 立创商城的元件原理图怎么弄到ad_(50条消息)立创EDA元件封装导入AD软件教程
  8. 目标导向型思维, 利他思维,迭代思维, 用忙碌打败无聊,整合型思维 重视运动
  9. 小米平板4刷recovery教程_小米平板2中文Recovery刷机教程
  10. android手机设置查看电池耗电,安卓查看电池损耗代码【搞定指南】
  11. 修一座安全的广厦,庇护赛博世界的流浪者
  12. win10打不开开始菜单的解决方法
  13. [流媒体]实例解析MMS流媒体协议,下载LiveMediaVideo[1][修正版,增加了带宽测试包]
  14. MySql学习笔记(2)--数据库操作及数据管理
  15. android增量编译,GitHub - brok1n/androidBsdiffUpdate: Android增量更新项目源代码。带C源程序以及ndk编译好的so包。可以直接导出使用。...
  16. Sqlserver修改表结构提示不允许保存更改。
  17. 与计算机硬件关系最密切的软件是A,计算机应用基础试卷A1112_2.doc
  18. PAT(BASIC)1037. 在霍格沃茨找零钱(20)
  19. java零钱换整程序_零钱兑换 Java
  20. 谈谈对摩尔定理的理解及其当前是否继续有效

热门文章

  1. 云计算计算机二级,2021计算机二级office用的是哪个版本
  2. oracle 12c sp2 0667,关于数据库安装的问题SP2-0667: Message file sp1.msb not found
  3. 安装MySQL出现 Install/Remove of the Service Denied!
  4. 安徽工业大学java实验报告_安徽工业大学java实验报告.doc
  5. Scikit-Learn (浅谈PCA降维算法)
  6. python 客户端_Python客户端
  7. dos系统功能调用的屏幕显示字符是( )号调用_linux混杂设备驱动模型分析(字符设备驱动模型使用篇)...
  8. 【clion】自定义优美的代码配色(主题)
  9. ue 新建html,第四课 开发uehtml官网响应式静态页面(示例代码)
  10. 人机协作机器人发展趋势_人工智能非万能!智能安防机器人下一站:人机协作...