mysql結合socket編程,詞典項目

詞典項目
客戶端:
"""
dict client
"""
from socket import *
from getpass import getpass
import re
ADDR = ('127.0.0.1',8000)
#create internet connect
s = socket()
s.connect(ADDR)

#deep deal
def operate(name):
    while True:
        print("""
          ===============welcom==============
          1.查單詞        2.歷史記錄      3.註銷
          ===================================
          """)
        cmd = input("@%s:enter you cmd"%name)
        if cmd == "1":
            do_search(name)
        elif cmd == '2':
            pass
        elif cmd == '3':
            return
        else:
            print("enter error!")

#REGISTER
def do_register():
    while True:
        name  = input("User:")
        passwd = input('pwd')
        passwd1 = input('pwd')
        if not re.match(r'^[a-zA-Z0-9_]{5,12}$', name):
            print('User format error,repeat:')
            continue
        if ' ' in passwd:
            print('passwd format error!')
            continue
        if passwd != passwd1:
            print('password is not same!')
            continue
        msg = "R %s %s"%(name,passwd)
        #send message
        s.send(msg.encode())
        #reserve message
        data = s.recv(128).decode()
        if data == 'OK':
            print("register success")
        else:
            print("register faild")
        return
def do_login():
    name =input("User:")
    passwd = input("Password:")
    msg = "L %s %s"%(name,passwd)
    s.send(msg.encode())
    print('loging ......')
    data = s.recv(128).decode()
    if data == "OK":
        print("login success!")
        operate(name)
    else:
        print("login faild")

def do_search(name):
    while True:
        word = input("enter English word: (exit: 'q')")
        if word == 'q':
            break
        msg = "S %s %s"%(name,word)
        s.send(msg.encode())
        mean = s.recv(1024)
        if mean == b"FAIL":
            print("search faild, dict havnt the word")
        else:
            print('%s : %s'%(word,mean.decode()))

def main():
    while True:
        print("""
        ===============welcom==============
        1.註冊          2.登錄         3.退出
        ===================================
        """)
        cmd = input("enter you cmd")
        if cmd == "1":
            do_register()
        elif cmd == '2':
            do_login()
            pass
        elif cmd == '3':
            break
        else:
            print("enter error!")


main()





服務端:
"""
server
"""
from socket import *
from multiprocessing import Process
import signal
import sys
from operation_db import *

#all varieble
HOST = '0.0.0.0'
PORT = 8000
ADDR = (HOST,PORT)

def do_register(c,db,data):
    tmp = data.split(' ')
    name = tmp[1]
    passwd = tmp[2]

    if db.register(name,passwd):
        c.send(b'OK')
    else:
        c.send(b'FAIL')

# try login
def do_login(c,db,data):
    tmp = data.split(' ')
    name = tmp[1]
    passwd = tmp[2]
    if db.login(name, passwd):
        c.send(b'OK')
    else:
        c.send(b'FAIL')

def do_search(c,db,data):
    tmp = data.split(' ')
    name = tmp[1]
    word = tmp[2]
    if db.search(name, word):
        mean = db.search(name,word)
        c.send(mean.encode())
    else:
        c.send(b'FAIL')

#internet connect
def do_request(c,db):
    db.create_cursor()  #create db.cur
    while True:
        data = c.recv(1024).decode()
        print(c.getpeername(),":",data)
        if data[0] == 'R':
            do_register(c,db,data)
        if data[0] == 'L':
            do_login(c,db,data)
        if data[0] == 'S':
            do_search(c,db,data)


def main():
    #create a database object
    db = Database()
    #create tcp socket
    s = socket()
    s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    s.bind(ADDR)
    s.listen(5)

    #deal the zombie process
    signal.signal(signal.SIGCHLD,signal.SIG_IGN)

    #wait server connect
    print("Listen the port 8000")
    while True:
        try:
            c,addr = s.accept()
            print("Connect from",addr)
        except KeyboardInterrupt:
            s.close()
            sys.exit("server exit")
        except Exception as e:
            print(e)
            continue
        p = Process(target = do_request,args = (c,db))
        p.daemon = True
        p.start()
main()


服務端核心:
"""
idct item data core
"""
import  pymysql
import hashlib

class Database:
    def __init__(self,host = 'localhost',
                     port = 3306,
                     user = 'root',
                     passwd = '123456',
                     database = 'dict',
                     charset = 'utf8'):
        self.host = host
        self.port = port
        self.user = user
        self.passwd = passwd
        self.database = database
        self.connect_db()    #connect database
        self.charset = charset
    def connect_db(self):
        self.db = pymysql.connect(host = self.host,
                                  port = self.port,
                                  user = self.user,
                                  passwd = self.passwd,
                                  database = self.database,
                                  )
    def create_cursor(self):
        self.cur = self.db.cursor()

    def pwd_transform(self,name,passwd):
        hash = hashlib.md5((name + "salt").encode())
        hash.update(passwd.encode())
        return hash.hexdigest()

    def close(self):
        self.cur.close()
        self.db.close()

    def register(self,name,passwd):
        sql = "select * from user where name='%s'"%name
        self.cur.execute(sql)
        r = self.cur.fetchone()
        if r:
            return False

        # pwd secure deal
        self.pwd_transform(name,passwd)
        sql = "insert into user (name,passwd)  \
              values (%s,%s)"
        try:
            self.cur.execute(sql,[name,self.pwd_transform(name,passwd)])
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False

    def login(self,name,passwd):
        sql = "select * from user where name='%s'" % name
        self.cur.execute(sql)
        r = self.cur.fetchone()
        if not r:
            return False
        passwd = self.pwd_transform(name,passwd)
        sql = "select passwd from user where name='%s'"% name
        try:
            self.cur.execute(sql)
            database_pwd  = self.cur.fetchone()
            if database_pwd[0] == passwd:
                return True
            else:
                return False
        except Exception:
            self.db.rollback()
            return False

    def search(self,name,word):
        sql = "select mean from edict where word = '%s'" % word
        try:
            self.cur.execute(sql)
            result = self.cur.fetchone()
            if not result:
                return False
            return result[0]
        except Exception:
            self.db.rollback()
            return False

數據庫推送
import pymysql
import re
db = pymysql.connect('localhost','root',
                    '123456','dict')
cur = db.cursor()
for data in open('dict.txt'):
    l = re.findall(r'(\d+)\s+(\w+-{0,1}\w+)\s+(.*)',data)
    try:
        sql = "insert into edict (word, mean) values (%s,%s)"
        cur.execute(sql,[l[0][1],l[0][2]])
        db.commit()
    except Exception as e:
        print('error',e)







 

發佈了13 篇原創文章 · 獲贊 17 · 訪問量 5409
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章