Python07新版作业源码:开发简单的FTP(仅供参考)

  • 服务器端:server_server.py
 1 #!usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # auther:Mr.chen
 4 # 描述:
 5
 6 import socket
 7 import os
 8 import threading
 9 import time
10 import json
11 from user_users import PersonInfo
12
13 DIR = os.path.dirname(os.path.abspath(__file__))
14 DIR = DIR+‘/Folder/‘
15
16 TAG = True
17
18
19
20 def tcplink(conn,addr):
21     """
22     tcp请求分析函数
23     :param conn: tcp连接对象
24     :param addr: 连接地址
25     :return:
26     """
27     print ("收到来自{0}的连接请求".format(addr))
28     conn.send(‘与主机通信中...‘)
29     while TAG:
30         try:
31             data = conn.recv(4096)
32             time.sleep(1)
33             if not data:
34                 break
35             else:
36                 print (data)
37                 if data == ‘ls‘:
38                     P.view_file(conn)
39                     continue
40                 action,filename = data.strip().split()
41                 action = action.lower()
42                 if action == ‘put‘:
43                     re = P.Recvfile(conn,filename)
44                     if re == True:
45                         print ("文件接收成功!")
46                     else:
47                         print ("文件接收失败!")
48                 elif action == ‘get‘:
49
50                     P.Sendfile(conn,filename)
51                 elif action == ‘login‘:
52                     name, password = filename.split(‘,‘)
53                     P = PersonInfo(name, password)
54                     re = P.login()
55                     if re == True:
56                         conn.send(‘Ready!‘)
57                     else:
58                         conn.send(‘False!‘)
59                 elif action == ‘register‘:
60                     name,password = filename.split(‘,‘)
61                     P = PersonInfo(name, password)
62                     re = P.register()
63                     if re == True:
64                         conn.send(‘Ready!‘)
65                     else:
66                         conn.send(‘False!‘)
67                 else:
68                     print ("请求方的输入有错!")
69                     continue
70         except Exception,e:
71             print "tcplink处理出现问题",e
72             break
73
74
75
76
77 if __name__ == ‘__main__‘:
78     host = ‘localhost‘
79     port = 8888
80     s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
81     s.bind((host,port))
82     s.listen(5)
83     print ("服务运行中:正在监听{0}地址的{1}端口:".format(host,port))
84     while TAG:
85         # 接受一个新连接
86         conn,addr = s.accept()
87         # 创建一个新线程处理TCP连接
88         t = threading.Thread(target=tcplink,args=(conn,addr))
89         t.start()
  • 服务器端:user_users.py
  1 #!usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 # auther:Mr.chen
  4 # 描述:
  5
  6 import time
  7 import os
  8 import pickle
  9
 10
 11 class PersonInfo:
 12     """
 13     用户模型类
 14     """
 15     DIR = os.path.dirname(os.path.abspath(__file__))
 16     DIR = DIR + ‘/Folder/‘
 17     ConfigDir = DIR.replace(‘Folder‘,‘db‘)
 18
 19     def __init__(self,name,password):
 20         self.Name = name   #用户名
 21         self.Password = password   #密码
 22         self.DIR = PersonInfo.DIR + self.Name +‘/‘   #用户家目录
 23
 24
 25     def login(self):
 26         """
 27         用户登陆
 28         :return:
 29         """
 30         dict = PersonInfo.config_read()
 31         if dict == None:
 32             return False
 33         if self.Name in dict:
 34             if dict[self.Name] == self.Password:
 35                 return True
 36         return False
 37
 38
 39
 40     def register(self):
 41         """
 42         用户注册
 43         :return:
 44         """
 45         if os.path.exists(self.DIR) != True:
 46             os.system(‘mkdir‘+‘ ‘+  self.DIR)
 47         try:
 48             dict = PersonInfo.config_read()
 49             if dict == None:
 50                 dict = {}
 51             if self.Name not in dict:
 52                 dict[self.Name] = self.Password
 53             else:
 54                 print ("姓名重复")
 55                 return False
 56             re = PersonInfo.config_write(dict)
 57             if re == True:
 58                 return True
 59         except Exception,e:
 60             print "注册出现异常!",e
 61             return False
 62
 63
 64
 65     def view_file(self,conn):
 66         """
 67         查看用户家目录
 68         :param conn:
 69         :return:
 70         """
 71         data = os.popen(‘ls‘+‘ ‘+ self.DIR).read()
 72         conn.sendall(data)
 73
 74     def Recvfile(self,conn,filename):
 75         """
 76         接收文件方法
 77         :param conn:tcp连接对象
 78         :param filename:目标文件名
 79         :return:
 80         """
 81         print ("开始接收文件...")
 82         conn.send(‘Ready!‘)
 83         buffer = []
 84         while True:
 85             d = conn.recv(4096)
 86             if d == ‘exit‘:
 87                 break
 88             else:
 89                 buffer.append(d)
 90         data = ‘‘.join(buffer)
 91         if data == ‘‘:
 92             return False
 93         print (data)
 94         print (filename)
 95         print (self.DIR)
 96         with open(self.DIR + filename, ‘w‘) as f:
 97             f.write(data)
 98             return True
 99
100
101     def Sendfile(self,conn,filename):
102         """
103             放送文件方法
104             :param conn: tcp连接对象
105             :param filename: 目标文件名
106             :return:
107             """
108
109         if os.path.exists(self.DIR + filename):
110             print ("开始放送文件...")
111             conn.send(‘Ready!‘)
112             time.sleep(1)
113             with open(self.DIR + filename, ‘r‘) as f:
114                 while True:
115                     data = f.read(4096)
116                     print (data)
117                     if not data:
118                         break
119                     conn.sendall(data)
120             time.sleep(1)
121             conn.send(‘exit‘)
122             print ("文件放送成功!")
123         else:
124             conn.send(‘False!‘)
125
126
127     @staticmethod
128     def config_read():
129         """
130         配置文件全部读取
131         :return:
132         """
133         if os.path.exists(PersonInfo.ConfigDir+‘user_config‘):
134             with open(PersonInfo.ConfigDir+‘user_config‘,‘r‘) as f:
135                 dict = pickle.load(f)
136                 return dict
137
138
139     @staticmethod
140     def config_write(dict):
141         """
142         配置文件全部写入
143         :param dict:
144         :return:
145         """
146         with open(PersonInfo.ConfigDir + ‘user_config‘, ‘w‘) as f:
147             pickle.dump(dict,f)
148             return True
  • 客户端:server_client.py
#!usr/bin/env python
# -*- coding:utf-8 -*-
# auther:Mr.chen
# 描述:

import socket,os
import time
TAG =True

DIR = os.path.dirname(os.path.abspath(__file__))
DIR = DIR+‘/Folder/‘
HOST = ‘localhost‘
PORT = 8888

def Recvfile(s,filename):
    """
    接收文件方法函数
    :param s: 套接字封装对象
    :param filename: 目标文件名
    :return:
    """
    print ("开始下载文件...")
    buffer = []
    while TAG:
        d = s.recv(4096)
        if d == ‘exit‘:
            break
        buffer.append(d)
    data = ‘‘.join(buffer)
    with open(DIR+filename,‘w‘) as f:
        f.write(data)
    print ("文件下载完毕!")

def Sendfile(s,filename):
    """
    放送文件方法函数
    :param s: 套接字封装对象
    :param filename: 目标文件名
    :return:
    """
    print ("开始上传文件!")
    if os.path.exists(DIR+filename):
        with open(DIR+filename,‘r‘) as f:
            while TAG:
                data = f.read(4096)
                if not data:
                    break
                s.sendall(data)
        time.sleep(1)
        s.send(‘exit‘)
        print ("文件上传完毕")
    else:
        print ("你的目录里没有这个文件")
        time.sleep(1)
        s.send(‘exit‘)

def Confirm(s,command):
    """
    验证与服务器连接是否正常;
    把用户命令发过去,让服务器做好相应准备准备
    :param s: 套接字封装对象
    :param command: 用户输入的命令
    :return:
    """
    s.sendall(command)
    re = s.recv(4096)
    if re == ‘Ready!‘:
        return True
    elif re == ‘False!‘:
        return False
    else:
        print ("与服务器连接出现异常!")

def File_transfer(s):
    """
    用户指令函数
    :param s:
    :return:
    """
    while TAG:
        command = raw_input("请输入你想执行的命令>>")
        if not command:
            continue
        if command.lower().strip() == ‘help‘:
            print ("请用‘put‘+‘空格‘+‘文件名‘的格式上传文件")
            print ("请用‘get‘+‘空格‘+‘文件名‘的格式下载文件")
            print ("输入‘ls‘查看用户服务器家目录")
            continue
        if command.lower().strip() == ‘ls‘:
            s.send(‘ls‘)
            data = s.recv(4096)
            print (data)
            continue
        try:
            action,filename = command.strip().split()
            action = action.lower()
        except:
            print ("您的输入有误!输入help查看帮助文档")
            continue
        if action == ‘put‘:
            re = Confirm(s,command)
            if re == True:
                Sendfile(s, filename)
            else:
                print ("对方服务器没有准备好!")
                break
        elif action == ‘get‘:
            re = Confirm(s,command)
            if re == True:
                Recvfile(s, filename)
            elif re == False:
                print ("服务器家目录没有这个文件")
            else:
                print ("对方服务器没有准备好!")
                break
        else:
            print ("你输入的命令有误!输入help查看帮助文档")

def Login(s):
    """
    用户登录
    :param s:
    :return:
    """
    name = raw_input("请输入你的用户名:")
    password = raw_input("请输入你的密码:")
    command = ‘login‘+‘ ‘+ name + ‘,‘ + password
    re = Confirm(s, command)
    if re == True:
        print ("登陆成功!")
        File_transfer(s)
    elif re == False:
        print ("您的输入有误,请重新输入!")
        Login(s)
    else:
        print ("与服务器连接出现异常!")

def Register(s):
    """
    用户注册
    :param s:
    :return:
    """
    name = raw_input("请输入你的用户名:")
    password = raw_input("请输入你的密码:")
    Password = raw_input("请再次输入密码:")
    if password != Password:
        print ("你的密码两次输入不一致,请重新输入!")
        Register(s)
    command = ‘register‘ + ‘ ‘ + name + ‘,‘ + password
    print (command)
    re = Confirm(s,command)
    if re == True:
        File_transfer(s)
    elif re == False:
        print ("用户名重复,请重新输入!")
        Register(s)
    else:
        print ("与服务器连接出现异常!")

def Main(s,log = ‘未联通主机...‘):
    """
    用户登陆界面
    :param s:
    :param log:
    :return:
    """
    text = """
            用户登陆界面      {0}

            1,用户登陆
            2,用户注册
    """.format(log)
    print (text)
    choose = raw_input("请输入索引进行选择:")
    if choose == ‘1‘:
        Login(s)
    elif choose == ‘2‘:
        Register(s)
    else:
        print ("你的选择有误!")

if __name__ == "__main__":

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        s.connect((HOST,PORT))
        Main(s,s.recv(1024))
    except Exception,e:
        print "服务器连接不上....",e
    finally:
        s.close()
时间: 12-11

Python07新版作业源码:开发简单的FTP(仅供参考)的相关文章

Python07旧版作业源码:虚拟人生(仅供参考)

bin目录: Simulated_life_start.py 1 #!usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # auther:Mr.chen 4 # 描述: 5 6 7 import sys 8 sys.path.append('..') 9 from src import users_business 10 11 12 users_business.user_Main() lib目录: Small_monster_model.py 1 #!

一个Listview的简单应用(内容仅供参考)

ListView中的xml.文件的内容 主应用的类 list的bean类 对应的adapter 相对应的item布局就不放了,希望多提意见!!!

草莓果园游戏开发系统源码开发

草莓果园游戏开发系统源码开发(微or电 158.1500.1390 小凡团队)草莓果园开发系统,草莓果园模式开发系统,草莓果园平台开发系统,草莓果园软件定制开发,草莓果园app开发. 草莓果园这个拆分盘简单的说就是:原始股就是果实.通过种植产生利息,利息大概一天有3.0%-3.6%左右,地里种植的果实x每日利率=每日收益(即每天产生的化肥).如果发展直推会员,那么每一位直推会员每天得到的利息的10%是领导的奖金.除了开地所需的最低果实(普通地块每块地最低种300果实,金地块每块地种3000)永久

Android源码开发利器——Java源码调试(基于4.1.2)

原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 调试Android Java源码 草帽的后花园--Neo 写在之前的话:这里主要是以调试Java源码为主,应该说是在system_process之后的源码,这对于调试和修改frameworks层的人来说真是一个利器,但至于为什么在system_process之后,我还在分析,如果有结果我会更新此文章,并正在尝试调试C++的代码,就是native中的代码,如果这个可行那将会大大

最新版ffmpeg源码分析

最新版ffmpeg源码分析一:框架 (ffmpeg v0.9) 框架 最新版的ffmpeg中发现了一个新的东西:avconv,而且ffmpeg.c与avconv.c一个模样,一研究才发现是libav下把ffmpeg改名为avconv了. 到底libav与ffmpeg现在是什么个关系?我也搞得希里糊涂的,先不管它了. ffmpeg的主要功能是音视频的转换和处理.其功能之强大已经到了匪夷所思的地步(有点替它吹了).它的主要特点是能做到把多个输入文件中的任意几个流重新组合到输出文件中,当然输出文件也可

亿发游时时彩-源码开发API

1)  函数指针的初始化. 函数如下: 1 int CompareString(const string& str1, const string& str2)2 {3     return str1.compare(str2); 4 } 函数的初始化有两种方式: 第一种,也是最普遍的方式: 1 int (*CompareFunction)(const string&, const string&) = CompareString; 第二种,是使用typedef定义函数类型,

配置Windows 2008 R2 64位 Odoo 8.0/9.0 源码开发调试环境

安装过程中,需要互联网连接下载python依赖库: 1.安装: Windows Server 2008 R2 x64标准版 2.安装: Python 2.7.10 amd64 到C:\Python27 并将下列路径加到PATH环境变量: C:\Python27\;C:\Python27\Scripts; 3.安装: Oracle jdk 1.7 到C:\Java 并配置 JAVA_HOME 环境变量,如 C:\Java\jdk1.7.0_71 4.安装: PostgreSQL 9.4.4-3 x

搭建kafka源码开发环境时使用"gradle idea"命令构建源码失败

我的环境: JDK: 1.8.0_131 Gradle: Gradle 3.1 Kafka源码包: kafka-0.10.0.1-src.tgz Zookeeper安装包: zookeeper-3.4.6.tar.gz Scala版本: 2.10.6 提示在 D:\soft\kafka-0.10.0.1-src\build.gradle文件的230行有问题.解决办法: 打开build.gradle文件:在开头添加如下内容: ScalaCompileOptions.metaClass.daemon

android 源码开发 关于编译等小知识点总结

fastboot flash boot out/target/product/generic/boot.img不管用,提示< waiting for device >   原因查找:   用fastboot命令查看设备提示无权限,如下:      $ fastboot -l devices      no permissions         fastboot usb:2-1.3   于是知道是因为权限问题,是fastboot没有权限, 解决步骤:   1. 将fastboot的所有者属性改