# 编辑者:闫龙
import socket,json,struct
class MySocket:
with open("FtpServiceConfig","r",encoding="utf8") as f:
Config = json.loads(f.read())
AFType= eval("socket."+Config["AFType"])
KIND=eval("socket."+Config["KIND"])
IPaddress= Config["IPaddress"]
Port=Config["Port"]
MaxLinks=Config["MaxLinks"]
def __init__(self):
self.SockObj = socket.socket(self.AFType,self.KIND)
self.SockObj.bind((self.IPaddress,self.Port))
self.SockObj.listen(self.MaxLinks)
def Starting(self):
self.Clients,self.IpInfo=self.SockObj.accept()
def GetHeadLen(self):
return struct.unpack("i",self.Clients.recv(4))[0]
def GetHead(self,Len:int):
return json.loads(self.Clients.recv(Len).decode("utf8"))
def GetDatas(self,Len:int):
return self.Clients.recv(Len)
def SendDatas(self,SendWhat):
self.Clients.send(SendWhat.encode("utf8"))
def ClientBye(self):
self.Clients.close()
def ByeBye(self):
self.SockObj.close()

FTP服务器类

 # 编辑者:闫龙
import socket,json,struct
class MyClient:
with open("FtpClientConfig","r",encoding="utf8") as f:
Config = json.loads(f.read())
AFType = eval("socket."+Config["AFType"])
KIND = eval("socket."+Config["KIND"])
IPaddress = Config["IPaddress"]
Port = Config["Port"]
def __init__(self):
self.SockObj = socket.socket(self.AFType,self.KIND)
def ConnetService(self):
self.SockObj.connect((self.IPaddress, self.Port))
def GetInfo(self,Len:int):
return self.SockObj.recv(Len)
def SendInfo(self,SendWhat):
self.SockObj.send(SendWhat)
def SendHeadLen(self,HeadLen):
HeadLen = json.dumps(HeadLen).encode("utf8")
self.SockObj.send(struct.pack("i",len(HeadLen)))
def SendHead(self,Head):
self.SockObj.send(json.dumps(Head).encode("utf8"))

FTP客户端类

 # 编辑者:闫龙
import FtpServerClass as fsc
import time
FtpService = fsc.MySocket()
FtpService.Starting()
while True:
try:
HeadLen = FtpService.GetHeadLen()
Head = FtpService.GetHead(HeadLen)
f = open(Head["FileName"],"wb")
RecvSize = 0
RecvData = b""
i = 1
while RecvSize < Head["DataSize"]:
getdata = FtpService.GetDatas(1024)
RecvData += getdata
RecvSize = len(RecvData)
f.write(getdata)
print("%s/%s"%(RecvSize,Head["DataSize"]))
time.sleep(0.0005)
except Exception as e:
print(e)
break

FTP服务器端

 # 编辑者:闫龙
import FtpClientClass as fcc
import os
FtpClient = fcc.MyClient()
FtpClient.ConnetService()
while True:
choice = input(">>>:")
if not choice : continue
FileSize = os.path.getsize(choice)
ClientHead = {"DataSize":FileSize,"FileName":os.path.basename(choice)}
FtpClient.SendHeadLen(ClientHead)
FtpClient.SendHead(ClientHead)
SendSize = 0
with open(choice,"rb") as f:
for i in f:
FtpClient.SendInfo(i)
SendSize += len(i)
print(SendSize)
print("上传完成")

FTP客户端

 {"AFType":"AF_INET","KIND":"SOCK_STREAM","IPaddress":"127.0.0.1","Port":9527,"MaxLinks":5}

服务器配置文件

 {"AFType":"AF_INET","KIND":"SOCK_STREAM","IPaddress":"127.0.0.1","Port":9527}

客户端配置文件

熬到现在头脑已经不清醒了,基本实现上传功能,未完待续

BUG太多,明天再说!

睡觉!

Python练习-基于socket的FTPServer的更多相关文章

  1. Python编写基于socket的非阻塞多人聊天室程序(单线程&多线程)

    前置知识:socket非阻塞函数(socket.setblocking(False)),简单多线程编程 代码示例: 1. 单线程非阻塞版本: 服务端: #!/usr/bin/env python # ...

  2. Python之基于socket和select模块实现IO多路复用

    '''IO指的是输入输出,一部分指的是文件操作,还有一部分网络传输操作,例如soekct就是其中之一:多路复用指的是利用一种机制,同时使用多个IO,例如同时监听多个文件句柄(socket对象一旦传送或 ...

  3. Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端     import ...

  4. 十三python基础之socket编程

      阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现 ...

  5. python基础之socket编程

    一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现象 十 什么是 ...

  6. python基础之socket编程 (转自林海峰老师)

    python基础之socket编程   阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 ...

  7. Python 网络编程——socket

    一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...

  8. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  9. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

随机推荐

  1. vSphere Client 连接ESXi 或者是vCenter 时虚拟机提示VMRC异常的解决办法

    1. 自己的vSphere 连接vCenter 向管理虚拟机 结果发现总是有异常. 提示如图示 VMRC控制台的连接已经断开 2. 花了比较长的时间也没搞定. 后来百度发现 关闭一个进程 然后重新登录 ...

  2. Linux下CPU信息的查看

    逻辑CPU个数: cat /proc/cpuinfo | grep "processor" | wc -l     //32 物理CPU个数: cat /proc/cpuinfo ...

  3. uva 1513(线段树)

    题目链接:1513 - Movie collection 题意:有一堆电影,按1-n顺序排,有m次操作,每次询问第ai个电影之前有多少个电影,然后将其抽出放在堆顶. 分析:线段树应用. 因为每次查询后 ...

  4. DataRow数组根据指定列排序

    正序:DataRow[] datarow = datarow.OrderBy(x=>x["Ybrq"]).ToArray(); 倒序:DataRow[] datarow = ...

  5. Angular 动态组件

    Angular 动态组件 实现步骤 Directive HostComponent 动态组件 AdService 配置AppModule 需要了解的概念 Directive 我们需要一个Directi ...

  6. 【bzoj5166】[HAOI2014]遥感监测 贪心

    题目描述 给出平面上 $n$ 个圆,在x轴上选出尽可能少的点,使得每个圆中至少有一个点.求这个最小点数. 输入 第1行: N R 分别表示激光点的个数和射电望远镜能检测到的半径 第2~N+1行: Xi ...

  7. BZOJ3240 NOI2013矩阵游戏(数论)

    必修五题. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<cmath> ...

  8. P2617 Dynamic Rankings

    题目描述 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤ ...

  9. [BZOJ2288&BZOJ1150]一类堆+链表+贪心问题

    今天我们来介绍一系列比较经典的堆+链表问题.这类问题的特点是用堆选取最优解,并且通过一些加减操作来实现"反悔". 在看题之前,我们先来介绍一个神器:手写堆. 手写堆的一大好处就是可 ...

  10. 每个 JavaScript 工程师都应懂的33个概念

    简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的.它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南. 本篇文章是参照 @leonardomso 创立,英文版项 ...