# 编辑者:闫龙
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. yii框架 excel导出

    环境: yii框架 basic版 1.下载 PHPexcel  (我用的是PHPExcel-1.8.1) 2.将下载的文件夹 (PHPExcel-1.8.1)放至 vender下  (路径:basic ...

  2. Logrotate还有谁记得它??

    我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱 ...

  3. VSS2005 上传pdf 空白

    加补丁 VS80-KB943847-X86-INTL.exe

  4. 【原创】 PLSQL 索引排序优化

    转载请注明出处 select /*+INDEX_DESC(T IDX_SYS_MESS_CREATE_DATE)*/ * FROM sys_message T where t.create_date ...

  5. 【刷题】BZOJ 3930 [CQOI2015]选数

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  6. 【Cf #290 C】Fox And Dinner(最大流)

    如果要相邻两个数(a[i] >= 2)相加为质数,显然它们的奇偶性不同,也就是说一个圆桌(环)必须是偶环. 也就是答案的若干个环组成了一张二分图,其中以奇偶分色. 考虑每个点的度数一定为2,用最 ...

  7. XML外部实体(XXE)注入详解

    ###XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Ex ...

  8. HDU 2087 剪花布条(字符串匹配,KMP)

    HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...

  9. Python 爬虫入门(一)

    毕设是做爬虫相关的,本来想的是用java写,也写了几个爬虫,其中一个是爬网易云音乐的用户信息,爬了大概100多万,效果不是太满意.之前听说Python这方面比较强,就想用Python试试,之前也没用过 ...

  10. python学习(21) smtp发送邮件

    原文链接: https://www.jianshu.com/p/369ec15bfe22 本文介绍python发送邮件模块smtplib以及相关MIME模块.smtplib用于生成邮件发送的代理,发送 ...