1. 程式人生 > >採用python socket 實現的簡易登入模組

採用python socket 實現的簡易登入模組

採用python socket 實現的簡易登入模組

1.客戶端


import socket
sk=socket.socket()
address=("49.140.79.30",2008)
conn=sk.connect(address)
while True:
    i=input("註冊請輸入1,登陸請輸入0\n")
    print(i)
     if i=="1":
            while True:
                sk.sendall(bytes(1))
                name=input("請輸入使用者名稱\n")
                password=input("請輸入密碼\n")
                password2=input("請再次輸入密碼\n")
                if password!=password2:
                    print("兩次密碼不一致")
                    continue
                
                sk.sendall(bytes(name.encode("utf-8")))
                sk.sendall(bytes(password.encode("utf-8")))
                if sk.recv(1024)==bytes(200): 
                    print("恭喜你註冊成功\n")
                    sk.close()
                    break
    if i=="0":
        sk=socket.socket()
        address=("49.140.79.30",2008)
        conn=sk.connect(address)
        while True:
            sk.sendall(bytes(2))
            name2=input("請輸入使用者名稱\n")
            password3=input("請輸入密碼\n")
            
            
            
            sk.sendall(bytes(name2.encode("utf-8")))
            
            if sk.recv(1024)!=bytes(password3.encode("utf-8")):
                print("使用者名稱或者密碼錯誤!請重新輸入\n")
                continue
            if sk.recv(1024)==bytes(200):
                
                print("恭喜你成功登陸!這裡是黃片拿去吧麼麼噠!\n")
                break
            print("登陸結束")
    else:
        print("caonima")                                    



    

伺服器端

dic_id_password={}
import socket
sk=socket.socket()
address=("49.140.79.30",2008)
sk.bind(address)
sk.listen(12)
print(dic_id_password)
while True:
    conn,addr=sk.accept()
    a=conn.recv(1024)
    if a==bytes(1):
        name=str(conn.recv(1024),encoding='UTF-8')
        
        password=str(conn.recv(1024),encoding='UTF-8')
        dic_id_password[name]=password
        conn.sendall(bytes(200))
    
    if a==bytes(2):
        name2=str(conn.recv(1024),encoding='UTF-8')
        password2=dic_id_password[name2]
        conn.sendall(bytes(password2.encode("utf-8")))
        
        
        conn.sendall(bytes(200))
    print(dic_id_password)

總結:原來sk.sendall()方法只能傳輸bytes資訊啊~我在動手操作之前,都一直以為它傳的是str資訊。甚至以為字典也能直接傳,真是太天真了。
這只是我軟體裡的一個小模組,以後整合進去。