支持用户命令行登录并且支持多线程
使用的数据库为mysql5.0
服务器代码:
Server.py:
# * coding:utf-8 -*- from socket import * from time import ctime import PDBC import threading import ServiceThread HOST = '' # 主机 PORT = 8002 # 端口号,可以随意选择 BUFSIZ = 4096 ADDR = (HOST, PORT) #主机端口号组成一个套接字地址 tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建一个套接字对象,是AF_INET族的tcp套接字 tcpSerSock.bind(ADDR) #这个函数用于绑定地址到套接字 tcpSerSock.listen(5) # 服务器开始监听连接,参数表示最多允许同时有几个连接进来 def jonny(client, address): count = 0 password = '' username = '' while True: data = client.recv(BUFSIZ) # 用于接收从客户端发来的数据 参数代表一次最多接受的数据量,这里为1k if not data: break if count == 0: username = data if count == 1: password = data if password == PDBC.login(username): client.send('登陆成功,请选择你接下来的的操作:') if password != PDBC.login(username) or PDBC.login(username) == False: print client.send('登录失败') if count > 1: print "客户端发来操作代码:", data client.send('[%s] %s' % (ctime(), data)) # 将时间戳作为内容发送给客户端 count += 1 client.close() while True: print ctime()+':等待客户端接入' client, address = tcpSerSock.accept() #用于等待连接的到来 thread = threading.Thread(target=jonny, args=(client, address)) thread.start() # print '客户端接入' # count = 0 # password = '' # username = '' # while True: # data = client.recv(BUFSIZ) #用于接收从客户端发来的数据 参数代表一次最多接受的数据量,这里为1k # if not data: # break # if count == 0: # username = data # if count == 1: # password = data # if password == PDBC.login(username): # client.send('登陆成功,请选择你接下来的的操作:') # if password != PDBC.login(username) or PDBC.login(username) == False: # print client.send('登录失败') # if count > 1: # print "客户端发来操作代码:",data # client.send('[%s] %s' % (ctime(), data)) # 将时间戳作为内容发送给客户端 # count += 1客户端代码:client.py:
# * coding:utf-8 -*- from socket import * print "初始化客户端配置" HOST = 'localhost' #由于服务器开设在自己电脑上,所以主机是本地 PORT = 8002 #同一个连接端口 BUFSIZ = 1024 ADDR = (HOST, PORT) print "开始连接服务器" tcpCliSock = socket(AF_INET, SOCK_STREAM) #同样的TCP套接字 tcpCliSock.connect(ADDR) # 连接相应的地址,初始化TCP服务器的连接 print "连接成功,请登录" print "输入用户名:" username = raw_input() tcpCliSock.send(username) print "输入密码:" password = raw_input() tcpCliSock.send(password) resp = tcpCliSock.recv(BUFSIZ) print resp print "1.查看文件列表" print "2.上传文件" print "3.下载文件" while True: data = raw_input('>') if not data: break tcpCliSock.send(data) # 向服务器传输数据 data = tcpCliSock.recv(BUFSIZ) # 接受服务器端的数据 if not data: break print data tcpCliSock.close()数据库连接模块:PDBC.py:
# * coding:utf-8 -*- import mysql.connector def login(username): conn = mysql.connector.connect(user='root', password='123456', database='bookhouse', use_unicode=True) cursor = conn.cursor() cursor.execute('select userPassword from userinfo where userName= %s ',(username,)) values = cursor.fetchall() cursor.close() conn.close() if values.__len__() == 0: return False else:return values[0][0]