Python 我的插座打不开

Python 我的插座打不开,python,loops,Python,Loops,我创建了一个带有登录系统的套接字。下面的代码是我在客户端系统上的登录类。它会收到登录成功或用户名/密码不正确的消息。print语句表明,这在服务器上得到了很好的解决,因此我的问题不在那里,也不在服务器部分。当密码错误时,它会重新开始登录,这正是我希望它做的。问题是当它是正确的登录时。服务器将成功发送登录,并将打印,但它不会中断循环,只会继续请求我的用户名和密码 def login(): username = str(input("Please enter your username to log

我创建了一个带有登录系统的套接字。下面的代码是我在客户端系统上的登录类。它会收到登录成功或用户名/密码不正确的消息。print语句表明,这在服务器上得到了很好的解决,因此我的问题不在那里,也不在服务器部分。当密码错误时,它会重新开始登录,这正是我希望它做的。问题是当它是正确的登录时。服务器将成功发送登录,并将打印,但它不会中断循环,只会继续请求我的用户名和密码

def login():
username = str(input("Please enter your username to login: "))
password = str(input("Please enter your password to login: "))
joint =(username+password)
message = hashPW(joint)
s.send(message.encode())
ls = s.recv(1024)
print(ls)
while ls != "Login successfull":
    login()
else:
    after_choice()
服务器代码:我认为这不是问题所在。我很确定这是因为我和客户无法正确地将其从循环中分离出来,但我想我还是要添加它来提供帮助

def recive():
    password = c.recv(1024).decode()#reciving the password
    print("Password from client: ", password)
    PWcheck()

def PWcheck():
    f= open("passwords.txt")
    f1=f.readlines()
    if password in f1:
        print("Login successfull")
        ls =("Login successfull")
        c.send(ls.encode())
        wait() #just the next class
    else:
        print("Username or password incorrect")
        ls =("Username or password incorrect")
        c.send(ls.encode())
        recive()

如果有人需要更多的代码添加,我可以。非常感谢您的帮助。

循环中的
登录
调用不会更改调用函数中的
ls
值。相反,您应该将希望重复的代码移动到循环体中,并且不要递归调用
login
@Patrik Haugh。谢谢你的回答。我试试看。听起来不错。我马上给你回电话。离题了,为什么你的服务器代码中的
密码是全局的?@donkopotamus这是我在玩我的代码试图让事情正常运行时写的。我试着把循环移到课堂外,看看我是否可以在需要的时候用break来阻止它。很快意识到这不管用。我一定是忘了把它拿走了。谢谢你的注意。@Patrick Haugh所以我编辑了我的代码。这里比较整洁,谢谢你。然而,我的问题仍然存在。在我看来,这应该行得通。如果密码是错误的,它会这样说。说得对。只要密码正确,它就不会移动了。太令人沮丧了。谢谢你的帮助:D