def sendToAllClients(messageSender, message):
# Formatting the message
messageHeader = f"{len(message) :< {HEADER_LENGTH}}".encode('utf-8')
messageList = {'header': messageHeader, 'data': message.encode('utf-8')}
# Send the message to all clients
for client in clients:
client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])
def sendMessageTo(messageSender, message, messageTargetUsername):
# Formatting the message
messageHeader = f"{len(message) :< {HEADER_LENGTH}}".encode('utf-8')
messageList = {'header': messageHeader, 'data': message.encode('utf-8')}
# Go through all clients
for client in clients:
# If the client has the same username as the target, send the message only to them
if clients[client].get('data').decode('utf-8') == messageTargetUsername:
client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])
每当我尝试使用sendMessageTo方法时,我都会得到错误 "TypeError: 'socket' object is not subscriptable",但当我使用SendToAllClients方法时却没有,有什么想法可以解释为什么会发生这种情况吗?
似乎给出错误的那行是。
client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])
但在sendToAllClients方法中,几乎同样的一行也能用?
不知道什么是 clients
是,这将是很难回答的。但我会尝试一件事。
而不是
if clients[client].get('data').decode('utf-8') == messageTargetUsername:
试试
if client.get('data').decode('utf-8') == messageTargetUsername:
我在这里假设 clients[client]
没有方法 get
因此,你得到的错误。试试看是否有效。