gpt4 book ai didi

python - TCP服务器无法在Python中正确接收数据

转载 作者:行者123 更新时间:2023-12-03 12:02:38 25 4
gpt4 key购买 nike

我正在尝试使用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,因此您需要剥离传入的数据。因此,最简单的方法是:

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

Strip仅除去尾随的空白,可能在此处最合适。
您可以通过执行以下操作来调试并检查是否属于这种情况:

print([name])

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

关于python - TCP服务器无法在Python中正确接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62109402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com