python实现电子词典

  

本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下

  

服务端         #?usr/bin/env python3   从__future__进口unicode_literals   #=utf - 8编码         从套接字进口*   进口操作系统   进口pymysql   导入的时间   导入系统   输入信号      DICT_TEXT="/dict.txt。"   主机=' 0.0.0.0 '   端口=8000   ADDR=(主机、端口)      #主控制流程         def main ():   #连接数据库   db=pymysql.connect \   (' localhost ',“根”,“123456”,“东西”)      #创建流式套接字   s=套接字()   年代。setsockopt (SOL_SOCKET SO_REUSEADDR 1)   s.bind (ADDR)   s.listen (5)   #或略子进程退出   signal.signal(信号。SIGCHLD signal.SIG_IGN)      而真正的:   试一试:   c, addr=s.accept ()   打印(“连接”,addr)   除了KeyboardInterrupt:   s.close ()   sys.exit(“服务器退出”)   除了例外e:   打印(e)   继续   #创建子进程处理客户端请求   pid=os.fork ()   如果pid==0:   s.close ()   do_child (c, db)   其他:   c.close ()         def do_child (c, db):   #循环接收请求   而真正的:   data=https://www.yisu.com/zixun/c.recv (128) .decode ()   打印(“请求:“数据)   如果(而不是数据)或数据[0]==癊”:   c.close ()   sys.exit (0)   elif数据[0]==癛”:   do_register (c、db、数据)   elif数据[0]==癓”:   do_login (c、db、数据)   elif数据[0]==拔省?   do_query (c、db、数据)   elif数据[0]==癏”:   do_history (c、db、数据)         def do_register (c、db、数据):   l=数据。分割(' ')   name=l [1]   passwd=l [2]      光标=db.cursor ()   sql=\   “从用户选择* name=' % s ' " %的名字   cursor.execute (sql)   r=cursor.fetchone ()   如果r !=没有:   c.send (b 'EXISTS”)   返回      sql="插入用户(名称、密码)\   值(' % s ', ' % s ')”%(名称、密码)   试一试:   cursor.execute (sql)   db.commit ()   c.send (b 'OK”)   除了:   db.rollback ()   c.send (b 'FALL”)   返回   其他:   打印(“% s注册成功”%的名字)         def do_login (c、db、数据):   l=数据。分割(' ')   name=l [1]   passwd=l [2]   光标=db.cursor ()      从用户那里\ sql=" select *   name=' % s '和passwd=? s”“%(名称、密码)      cursor.execute (sql)   r=cursor.fetchone ()   如果r==没有:   c.send(“用户名或密码不正确的.encode ())   其他:   c.send (b 'OK”)         def do_query (c、db、数据):   l=数据。分割(' ')   name=l [1]   词=l [2]   光标=db.cursor ()      def insert_history ():   tm=time.ctime ()   sql="插入嘘\(名称、文字、时间)   值(' % s ', ' % s ', ' % s ')”%(名称、词、tm)   试一试:   cursor.execute (sql)   db.commit ()   除了:   db.rollback ()   返回      试一试:   f=开放(DICT_TEXT rb)   除了:   c。发送(“500服务端异常“.encode ())   返回   而真正的:   行=f.readline () .decode ()   w=线。分割(' ')[0]   如果(不行)或w比;词:   c.send(“没找到该单词“.encode ())   打破   elif w==词:   c.send (b 'OK”)   time . sleep (0.1)   c.send (line.encode ())   insert_history ()   打破   f.close ()         def do_history (c、db、数据):   name=数据。分割(' ')[1]   光标=db.cursor ()      试一试:   从嘘\ sql=" select *   在name=' % s ' " %的名字吗   cursor.execute (sql)   r=cursor.fetchall ()   如果不是r:   c.send('没有历史记录”.encode ())   返回   其他:   c.send (b 'OK”)   除了:   c.send(“数据库查询错误”.encode ())   返回   n=0   因为我在r:   n +=1   #最多显示10条   如果n比;10:   打破   time . sleep (0.1)   味精=" % s % s % s " %(我[1],[2],[3])   c.send (msg.encode ())   time . sleep (0.1)   c.send (b“# #”)         if __name__==癬_main__”:   main ()      

客户端         #?usr/bin/env python3   #=utf - 8编码      从套接字进口*   导入系统   进口getpass      def main ():   如果len (sys.argv) & lt;3:   打印(“argv是错误”)   返回   主机=sys.argv [1]   端口=int (sys.argv [2])   ADDR=(主机、端口)      s=套接字()   s.connect (ADDR)      而真正的:   打印(“\ n====================欢迎   ——1。注册2。登录3。退出—   ===========================   “”)   试一试:   cmd=int(输入(“输入选项祝辞祝辞”))   除了例外:   打印(“输入命令错误”)   继续      如果cmd不在[1,2,3]:   打印(“对不起,没有该命令”)   sys.stdin.flush() #清除输入   继续   elif cmd==1:   name=do_register (s)   如果名字!=1:   打印(“注册成功,直接登录!”)   登录(年代,名称)   其他:   打印(“注册失败!”)   elif cmd==2:   name=do_login (s)   如果名字!=1:   打印(“登录成功!”)   登录(年代,名称)   其他:   打印(“登录失败!”)   elif cmd==3:   s.send (b“E”)   sys.exit(“谢谢使用”)      def do_register (s):   而真正的:   name=输入(“用户名:“)   passwd=getpass。getpass(“密码:”)   passwd1=getpass.getpass(“确认密码:")      如果(“名字)或(“passwd):   打印(“用户名密码不允许空格”)   继续   如果密码!=passwd1:   打印(“两次密码不一致”)   继续      味精=" R {} {} " .format(名称、密码)   #发送请求   s.send (msg.encode ())   #接收回复   data=https://www.yisu.com/zixun/s.recv (128) .decode ()      如果数据==癘K”:   返回的名字   elif data=https://www.yisu.com/zixun/=按嬖凇?   打印(“该用户已存在”)   返回1   其他:   返回1   def do_login (s):   name=输入(“用户名:“)   passwd=getpass。getpass(“密码:”)   味精=" L {} {} " .format(名称、密码)   s.send (msg.encode ())   data=s.recv (128) .decode ()      如果数据=https://www.yisu.com/zixun/=癘K”:   返回的名字   其他:   打印(数据)   返回1      def登录(年代,名字):   而真正的:   打印(“\ n===========查询界面============1.查词2。历史记录3。注销   =============================   “”)   试一试:   cmd=int(输入(“输入选项祝辞祝辞”))   除了例外:   打印(“命令错误”)   继续   如果cmd不在[1,2,3]:   打印(“对不起,没有该命令”)   sys.stdin.flush() #清除输入   继续   elif cmd==1:   do_query(年代,名称)   elif cmd==2:   do_history(年代,名称)   elif cmd==3:   返回      def do_query(年代,名字):   而真正的:   词=输入(“单词:“)   如果字==" # # ":   打破   味精="问{}{}" .format(名称、文字)   s.send (msg.encode ())   data=s.recv (128) .decode ()   如果数据=https://www.yisu.com/zixun/=癘K”:   data=https://www.yisu.com/zixun/s.recv (2048) .decode ()   打印(数据)   其他:   打印(数据)         def do_history(年代,名字):   H味精=" {}" .format(名称)   s.send (msg.encode ())   data=s.recv (128) .decode ()   如果数据=https://www.yisu.com/zixun/=癘K”:   而真正的:   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

python实现电子词典