首页 > 其他分享 >socketserver实现文件上传

socketserver实现文件上传

时间:2024-10-19 23:21:18浏览次数:1  
标签:__ 文件 socketserver self cmd filename dic 上传 def

1.服务端

import  os
import json
import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
def put(self, *args):
cmd_dic = args[0]
filename = cmd_dic["filename"]
filesize = cmd_dic["size"]
if os.path.isfile(filename):
f = open(filename + ".new", "wb")
else:
f = open(filename, "wb")
self.request.send(b"200 ok")
received_size = 0
while received_size < filesize:
data = self.request.recv(1024)
f.write(data)
received_size += len(data)
else:
f.close()
print("file [%s] has uploaded..." % filename)


def handle(self):
while True:
try:
self.data = self.request.recv(1024).strip()
print("{} wrote".format(self.client_address[0]))
print(self.data)
cmd_dic = json.loads(self.data.decode())
action =cmd_dic["action"]
if hasattr(self, action):
func = getattr(self, action)
func(cmd_dic)
except ConnectionResetError as e:
print("error", e)
break

if __name__=="__main__":
HOST, PORT = "0.0.0.0", 22222
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()

 

2.客户端

import socket, os
import json

class FtpClient(object):
def __init__(self):
self.client = socket.socket()
def connect(self, ip, port):
self.client.connect((ip, port))
def interactive(self):
while True:
cmd = input(">>:").strip()
if len(cmd) == 0: continue
cmd_str = cmd.split()[0]
if hasattr(self, "cmd_%s" % cmd_str):
func = getattr(self, "cmd_%s" % cmd_str)
func(cmd)
else:
self.help()
def help(self):
msg = """
ls
pwd
cd
get filename
wget filename
"""

def cmd_put(self, *args):
cmd_split = args[0].split()
if len(cmd_split) > 1:
filename = cmd_split[1]
if os.path.isfile(filename):
filesize = os.stat(filename).st_size
msg_dic = {
"action": "put",
"filename": filename,
"size": filesize,
"overridden": True
}
self.client.send(json.dumps(msg_dic).encode("utf-8"))
#防止粘包,等服务器确认
server_response = self.client.recv(1024)
f = open(filename, "rb")
for line in f:
self.client.send(line)
else:
print("file upload success...")
f.close()

else:
print(filename, "is not exist")
def cmd_wget(self):
pass


ftp = FtpClient()
ftp.connect("localhost", 22222)
ftp.interactive()

 

3.使用

put filename

标签:__,文件,socketserver,self,cmd,filename,dic,上传,def
From: https://www.cnblogs.com/circlecircle/p/18486722

相关文章

  • ntfs MFT损坏(ntfs文件系统故障)导致oracle异常恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:ntfsMFT损坏(ntfs文件系统故障)导致oracle异常恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]客户虚拟化环境,由于断电,启动数据库报ORA-01157错误,通过操作系统层面查看,发现......
  • .mkp扩展名oracle数据文件加密恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:.mkp扩展名oracle数据文件加密恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]又有客户的oracle数据库文件被勒索,扩展名被加密为:.[[email protected]].mkp对应的+READM......
  • 奇怪的错误:关于函数重载,头文件使用和新手避坑的小科普
    奇怪的错误:关于函数重载,头文件使用和新手避坑的小科普题目描述        个小球排成一排,现在有种不同颜色的油漆,给每个小球都涂色。如果相邻两个小球的颜色必须不同,那么共有多少种涂法?输入        一行,两个整数,。输出        一行,一个整数,为满......
  • 低功耗4G模组Air780E快速入门:使用文件系统存储温湿度数据
    ​伙伴们,今天我们来学习合宙低功耗4G模组Air780E快速入门之使用文件系统存储温湿度数据。一、编写脚本1.1准备资料780E开发板购买链接780E开发板设计资料LuatOS-Air780E-文件系统的使用-程序源码demo合宙的TCP/UDP测试服务器API使用介绍780E开发板和DHT11 ​1.2 ......
  • 文件目录
    知识总览文件目录的基本概念上节说过,FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的属性、位置和所有权等。首先来看目录管理的基本要求:从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提......
  • QT项目打包成exe文件-非常详细(侧重于解决输出的exe文件没有原项目功能的问题)
    写在前面: 我是研二学生,用qt给老师项目做的一个辅助软件。项目要验收,所以需要打包qt项目成exe文件,但是我死活弄不出来,来回搞了两三天才弄好。特此写下第一篇博客,记录这个过程,并给同样困扰的新手朋友们提供一个方法。我是一个新手,期待大家的批评指正。打包流程: 1、获取初始......
  • 文件系统基础
    初识文件系统文件是以硬盘位载体存储在计算机上的信息集合,在系统运行时,计算机以进程为基本单位进行资源的调度与分配而在用户进行的输入、输出中,则以文件为基本单位。这就需要操作系统有一个文件管理系统。操作系统的文件管理系统需要关心以下内容:计算机中存放了各种各样的文......
  • php网站用什么修改数据库文件格式
    在PHP网站中修改数据库文件格式通常涉及以下几个步骤或工具:使用PHP脚本直接操作数据库:利用PHP的数据库扩展(如PDO,MySQLi)来执行SQL语句,实现数据表结构的修改。示例代码使用PDO修改表结构:<?php$dsn='mysql:host=localhost;dbname=testdb';$username='root';$passw......
  • php网站用什么修改数据库文件
    在PHP网站中修改数据库文件通常涉及以下几个步骤或工具:PHP代码直接操作:使用PHP内置的数据库扩展,如mysqli或PDO,来执行SQL查询,实现对数据库的增删改查操作。示例使用PDO连接MySQL数据库并更新数据:<?php$dsn='mysql:host=localhost;dbname=testdb';$username='root';......
  • HarmonyOS Stage 模型:进程、线程与配置文件之浅析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。HarmonyOS的Stage模型为开发者提供......