python实现类似ftp传输文件的网络程序示例
此代码在linux上编写,适用于linux,windows下需要更改几个命令。
1、客户端输入IP,端口,可服务器端进行连接,被要求输入用户名和密码进行验证。
2、使用独立的模块来验证登录用户(技术有限,不支持客户端创建用户),用户名:ftpuser 密码:userlogin
2、客户端登录验证成功后,可使用?或者help查看可使用的命令。
ftpserver.py
#!/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
#!/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
#!/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()

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

羽化控制的关键在于理解其渐变本质。PS本身不提供直接控制渐变曲线的选项,但你可以通过多次羽化、配合蒙版、精细选区,灵活调整半径和渐变柔和度,实现自然过渡效果。

MySQL 有免费的社区版和收费的企业版。社区版可免费使用和修改,但支持有限,适合稳定性要求不高、技术能力强的应用。企业版提供全面商业支持,适合需要稳定可靠、高性能数据库且愿意为支持买单的应用。选择版本时考虑的因素包括应用关键性、预算和技术技能。没有完美的选项,只有最合适的方案,需根据具体情况谨慎选择。

PS羽化是一种图像边缘模糊效果,通过在边缘区域对像素加权平均实现。设置羽化半径可以控制模糊程度,数值越大越模糊。灵活调整半径可根据图像和需求优化效果,如处理人物照片时使用较小半径保持细节,处理艺术作品时使用较大半径营造朦胧感。但需注意,半径过大易丢失边缘细节,过小则效果不明显。羽化效果受图像分辨率影响,且需要根据图像理解和效果把握进行调整。

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

PS羽化会导致图像细节丢失、色彩饱和度降低和噪点增加。为了减少影响,建议使用较小的羽化半径,复制图层后再羽化,以及仔细对比羽化前后图像质量。此外,羽化并不适用于所有情况,有时蒙版等工具更适合处理图像边缘。

MySQL数据库性能优化指南在资源密集型应用中,MySQL数据库扮演着至关重要的角色,负责管理海量事务。然而,随着应用规模的扩大,数据库性能瓶颈往往成为制约因素。本文将探讨一系列行之有效的MySQL性能优化策略,确保您的应用在高负载下依然保持高效响应。我们将结合实际案例,深入讲解索引、查询优化、数据库设计以及缓存等关键技术。1.数据库架构设计优化合理的数据库架构是MySQL性能优化的基石。以下是一些核心原则:选择合适的数据类型选择最小的、符合需求的数据类型,既能节省存储空间,又能提升数据处理速度

直接通过 Navicat 查看 MongoDB 密码是不可能的,因为它以哈希值形式存储。取回丢失密码的方法:1. 重置密码;2. 检查配置文件(可能包含哈希值);3. 检查代码(可能硬编码密码)。
