TCP服务器在Python中未正确接收数据

2024-05-18 23:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python创建一个TCP服务器,您必须在其中登录才能进入,但在验证用户是否可以进入时,它总是说找不到用户,即使用户应该可以进入。这是服务器代码:

import socket
from threading import *


class user:
    def __init__(self, username, password):
        self.username = username
        self.password = password


user1 = user('user', 'pass')

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ""
port = 9000
serversocket.bind((host, port))


class client(Thread):
    def __init__(self, socket, address):
        Thread.__init__(self)
        self.sock = socket
        self.addr = address
        self.start()

    def run(self):
        while 1:
            self.sock.send(b'LOGIN\n')
            self.sock.send(b'Username:')
            name = self.sock.recv(1024).decode()
            print(name)
            print(user1.username)
            self.sock.send(b'Password:')
            pw = self.sock.recv(1024).decode()
            print(pw)
            print(user1.password)
            if (name == user1.username) and (pw == user1.password):
                self.sock.send(b'Welcome, ', name)
            else:
                self.sock.send(b'User not found.')


serversocket.listen(5)
print('server started and listening')
while 1:
    clientsocket, address = serversocket.accept()
    client(clientsocket, address)

我正在使用telnet与服务器通信,我可以看到输入是正确的。这是确认它们相似的输出:

server started and listening
user

user
pass

pass

这是telnet控制台:

LOGIN
Username:user
Password:pass
User not found.

感谢您的帮助。谢谢


1条回答
网友
1楼 · 发布于 2024-05-18 23:25:45

从telnet到服务器的预期输入与您想象的不同。
由于telnet在传输的字符串末尾添加了一个尾随\n,因此需要剥离传入的数据。因此,最简单的方法是:

name = self.sock.recv(1024).decode().strip()
pw = self.sock.recv(1024).decode().strip()

条带只是删除尾随的空白,可能最适合在此处使用。
您可以通过执行以下操作来调试和检查情况:

print([name])

作为一种肮脏的解决方法,可以查看字符串的实际内容,而不仅仅是终端中的打印表示。它应该向您显示user\n,而不是您所期望的user。打印或调试变量,以验证内容是否符合预期,这始终是一个好主意

相关问题 更多 >

    热门问题