我正在尝试用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.
感谢您的帮助。谢谢
从telnet到服务器的预期输入与您想象的不同。
由于telnet在传输的字符串末尾添加了一个尾随
\n
,因此需要剥离传入的数据。因此,最简单的方法是:条带只是删除尾随的空白,可能最适合在此处使用。
您可以通过执行以下操作来调试和检查情况:
作为一种肮脏的解决方法,可以查看字符串的实际内容,而不仅仅是终端中的打印表示。它应该向您显示
user\n
,而不是您所期望的user
。打印或调试变量,以验证内容是否符合预期,这始终是一个好主意相关问题 更多 >
编程相关推荐