Несколько сокетов / повторное использование / закрытие сокетов в Python?_socketobject error - PullRequest
3 голосов
/ 17 августа 2011

, поэтому я пытался создать этого бота на python, который использует сокеты для получения некоторой информации в чат и из чата на веб-сайте.Это требует входа в систему, который получает ключи, затем, используя ключи от первого соединения, вы можете подключиться к чату (другой сокет / IP)

Я пытался сделать это с помощью socket.close () и еще много чего, ноУвы, я продолжаю получать ошибки: (

Это то, что я сейчас использую:

def send_packet(socket, packet):
    socket.send(packet+chr(0))

def socket_make(host, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    return s

socket = socket_make(get_ip('8'), get_port('8'))
send_packet(socket, '<y r="8" />')
socket.recv(1024)
send_packet(socket, '<v n="'+username+'" p="'+password+'" />')
tmp = socket.recv(1024)
socket.close()

socket = socket_make("174.36.242.40",10032)
send_packet(socket, '<y r="'+infos['c']+'" />')
token = socket.recv(1024)
token = token[token.find('i="')+3:token.find('" c="')]

Это выдает эту ошибку атрибута, предположительно потому, что .socket ничего не значит, но обычноделает? Я не совсем уверен

AttributeError: '_socketobject' object has no attribute 'socket'

1 Ответ

1 голос
/ 17 августа 2011

Вы ранее импортировали модуль сокета. Затем вы создаете глобальную переменную с тем же именем ("socket"), которая теперь занимает место модуля. Модуль исчез, и теперь это объект сокета. Затем, когда вы попытаетесь вызвать socket_make во второй раз, глобальный socket уже не будет модулем, а экземпляром сокета.

Используйте другое имя или, что еще лучше, инкапсулируйте весь ваш клиент в другой класс.

...