为什么我不能从同一个客户处收到两次

时间:2019-08-24 23:28:48

标签: python python-3.x

基本上我有客户端,ip = s.accept()

我想发送和接收发送和接收,但是打印第二个接收不返回任何信息

我正在通过Putty RAW模式连接,我尝试了其他程序,但没有任何效果。

def function(client, ip):
        print(Fore.YELLOW + f"Connection from {ip} Established")
        client.send("Username: ".encode("utf-8"))
        username = client.recv(1024).decode("utf-8")
        client.send("Password: ".encode("utf-8"))
        password = client.recv(1024).decode("utf-8")
        print(username + ":" + password)

我希望它输出“ username:password” 但它返回“用户名:”

1 个答案:

答案 0 :(得分:0)

您似乎只是期望第一个recv会获得用户名,第二个recv会通过魔术或运气获得密码。如果有某种协议可以让您知道用户名在哪里结束并且密码在哪里开始,则需要实现它。

您第一次致电recv可能只会得到用户名的第一个字母。也许第一个电话获取了用户名,第二个电话获取了用户名和密码之间的空格或换行符,但您尚未读取密码。谁知道?

如果无法知道用户名和密码之间的界限,则该代码可能无法工作。如果有某种方法,那是什么方法,实现它的代码在哪里?

在发送Password:提示之前,您的代码是否应该接收用户名?如果是这样,执行该操作的代码在哪里?您拨打了recv,但没有检查它是否是用户名。它可能只是用户名的第一个字符。可能更多。您需要查看它,看看它是什么。在收到完整的用户名之前,请勿发送Password:提示。您必须实际实现所使用的协议,而客户端必须使用相同的协议。