源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

python实现类似ftp传输文件的网络程序示例

  • 时间:2020-06-08 07:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python实现类似ftp传输文件的网络程序示例
此代码在linux上编写,适用于linux,windows下需要更改几个命令。 1、客户端输入IP,端口,可服务器端进行连接,被要求输入用户名和密码进行验证。 2、使用独立的模块来验证登录用户(技术有限,不支持客户端创建用户),用户名:ftpuser  密码:userlogin 2、客户端登录验证成功后,可使用?或者help查看可使用的命令。 ftpserver.py
[u]复制代码[/u] 代码如下:
#!/usr/bin/env python #-*- coding:utf-8 "Program for ftp server" from SocketServer import * from time import * import os import loginauth   class MyFtp(StreamRequestHandler):     def handle(self):         try:             while True:                 sleep(0.5)                 self.request.sendall('auth')                 name = self.request.recv(BUFSIZ)                 sleep(0.5)                 self.request.sendall('pauth')                 password = self.request.recv(BUFSIZ)                 print name,password                 auth_result = loginauth.user_create(name,password)                 print auth_result                 if auth_result == 0:                     self.request.sendall('ok2login')                     break                 elif auth_result == 1:                     self.request.sendall('fail2login')                     continue             while True:                 recv_data = self.request.recv(BUFSIZ).split()                 if recv_data[0] == 'rls':                     result = os.popen('ls -l ./').read()                     self.request.sendall(result)                     continue                 if recv_data[0] == '?' or recv_data[0] == 'help':                     send_help = '''\033[32;1m                                 ?\help:     Get help.                                 Get:        Downlaod file from remote server.                                 Send:       Send local file to remote server.                                 ls:         List local file.                                 rls:        List remote server file.                                 quit\exit:  Quit the application.                                 \033[0m'''                     self.request.sendall(send_help)                     continue                 if recv_data[0] == 'send':                     filename = recv_data[1]                     self.request.sendall('ok2send')                     recv_data = self.request.recv(BUFSIZ)                     file2w = open(filename,'wb')                     file2w.write(recv_data)                     file2w.flush()                     file2w.close()                     self.request.sendall('\033[33;1mFile transfer successed!!!\033[0m')                     continue                 if recv_data[0] == 'get':                     filename = recv_data[1]                     if os.path.isfile(filename):                         self.request.sendall('ok2get')                         if self.request.recv(BUFSIZ) == 'ok2send':                             self.request.sendall('sending')                             sleep(0.5)                             file_data = open(filename,'rb')                             file_tmp = file_data.read()                             self.request.sendall(file_tmp)                             sleep(1)                             self.request.sendall('\033[33;1mDownloading complete!\033[0m')                             file_data.close()                     else:                         self.request.sendall('fail2get')                         if self.request.recv(BUFSIZ) == 'ack':                             self.request.sendall('\033[31;1m%s not found\033[0m'% filename)         except :             pass if __name__ == '__main__':     HOST,PORT = '',9889     ADDR = (HOST,PORT)     BUFSIZ = 8192     try:         server = ThreadingTCPServer(ADDR,MyFtp)         server.serve_forever()     except KeyboardInterrupt:         server.shutdown()
loginauth.py
[u]复制代码[/u] 代码如下:
#!/usr/bin/env python #-*- coding:utf-8 #Filename:userlogin.py "Program for userlogin" import sys,time import cPickle as pickle #If it's your first running this program,use USERDB = {} #If it is not your first running this program,use USERDB = pickle.load(open('userdb','rb')) USERDB = pickle.load(open('userdb','rb')) #USERDB = {} class userdb(object):     def __init__(self,username,password,time):         self.username = username         self.passwd = password         self.time = time     def save_user(self):         USERDB[self.username] = [self.passwd,self.time]         pickle.dump(USERDB,open('userdb','wb'),True)     def update_db(self):         pass   def user_create(NAME,PASSWD = ''):     if NAME in USERDB:         if PASSWD == USERDB[NAME][0]:             p = userdb(NAME,PASSWD,time.time())             p.save_user()             return 0         else:             return 1     else:         #p = userdb(NAME,PASSWD,time.time())         #p.save_user()         return 1 if __name__ == '__main__':     user_create(name,password)
ftpclient.py
[u]复制代码[/u] 代码如下:
#!/usr/bin/env python #-*- coding:utf-8 "Program for ftp client." from socket import * from time import sleep import os def auth():     while 1:         try:             recv_msg = s.recv(BUFSIZ)             if recv_msg == 'auth':                 USER = str(raw_input('Please input your username: ')).strip()                 s.sendall(USER)                 if s.recv(BUFSIZ) == 'pauth':                     PASS = str(raw_input('Please input your password: ')).strip()                     s.sendall(PASS)                     recv_msg1 = s.recv(BUFSIZ)                     if recv_msg1 == 'ok2login':                         print '\033[33;1mlogin success!!!\033[0m'                         break                     elif  recv_msg1 == 'fail2login':                         print '\033[33;1mlogin failure!!!\033[0m'                         continue                     else:                         continue         except:             return 'error' def switch():     while True:         INPUT = str(raw_input('ftp> ')).strip()         if len(INPUT) == 0:continue         elif INPUT == 'quit' or INPUT == 'exit':             s.close()             break         elif INPUT == '?' or INPUT == 'help':             s.send(INPUT)             recv_data = s.recv(BUFSIZ)             print recv_data             continue         elif INPUT == 'get' or INPUT == 'send':             print '\033[31;1mYou must specified filename!!\033[0m'             continue         elif INPUT == 'ls':             cmd = os.popen('ls -l ./').read()             print cmd             continue         elif INPUT == 'rls':             s.send(INPUT)             recv_data = s.recv(BUFSIZ)             print recv_data             continue         elif INPUT.split()[0] == 'send':             filename = INPUT.split()[1]             if os.path.isfile(filename):                 print 'Sending %s......'% filename                 s.sendall(INPUT)                 re_data = s.recv(BUFSIZ)                 if re_data == 'ok2send':                     file_data = open(filename,'rb')                     file_tmp = file_data.read()                     file_data.close()                     s.sendall(file_tmp)                     sleep(0.5)                     recv_data = s.recv(BUFSIZ)                     print recv_data                     continue                 else:continue             else:                 print '\033[31;1m%s not found!\033[0m'% filename         elif INPUT.split()[0] == 'get':             filename = INPUT.split()[1]             s.sendall(INPUT)             msg1 = s.recv(BUFSIZ)             if msg1 == 'ok2get':                 s.sendall('ok2send')                 msg2 = s.recv(BUFSIZ)                 if msg2 == 'sending':                     file_data = s.recv(BUFSIZ)                     file2w = open(filename,'wb')                     file2w.write(file_data)                     file2w.flush()                     file2w.close()                     msg3 = s.recv(BUFSIZ)                     print msg3                     continue             elif msg1 == 'fail2get':                 s.send('ack')                 msg4 = s.recv(BUFSIZ)                 print msg4                 continue         else:             continue if __name__ == '__main__':     #Default 127.0.0.1     HOST = str(raw_input('Server IP: ')).strip()     #Defautl 9889     PORT = int(raw_input('Server PORT: '))     ADDR = (HOST,PORT)     BUFSIZ = 8192     s = socket(AF_INET,SOCK_STREAM)     try:         s.connect(ADDR)     except :         pass     if auth() == 'error':         print 'Connection refused.'     else:         switch()
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部