採用python socket 實現的簡易登入模組
阿新 • • 發佈:2018-11-16
採用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資訊。甚至以為字典也能直接傳,真是太天真了。
這只是我軟體裡的一個小模組,以後整合進去。