Python: получение «объект 'socket' не подлежит подписке» - PullRequest
0 голосов
/ 06 мая 2020
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'])

Я получаю сообщение об ошибке «TypeError: объект 'socket' не подлежит подписке» всякий раз, когда я пытаюсь использовать метод sendMessageTo, но не когда я использую метод SendToAllClients, есть идеи, почему это происходит?

Строка, которая, кажется, выдает ошибку:

client.send(messageSender['header'] + messageSender['data'] + messageList['header'] + messageList['data'])

Но почти такая же строка в sendToAllClients работает ??

1 Ответ

0 голосов
/ 06 мая 2020

Не зная, что такое clients, ответить будет сложно. Я попробую одно.

Вместо

if clients[client].get('data').decode('utf-8') == messageTargetUsername:

Попробуйте

if client.get('data').decode('utf-8') == messageTargetUsername:

Я предполагаю, что здесь clients[client] не имеет метода get , следовательно, вы получаете сообщение об ошибке. Попробуйте и посмотрите, работает ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...