Как получить несколько клиентов для подключения к одному и тому же источнику в Python?

Я сделал класс в Python, в котором есть сокет. Когда я пытаюсь запустить несколько экземпляров одного и того же класса, я получаю эту ошибку:

error: [Errno 10056] A connect request was made on an already connected socket

Я могу видеть, что говорит ошибка, но я, хотя классы были независимы друг от друга, когда они работают. Так что это не помешает.

Вот код, который я использую:

class Bot():

    HOST = "localhost"
    PORT = 6667
    s = socket.socket()

    def Connect(self):

        self.s.connect((self.HOST, self.PORT))

Затем, когда я создаю ботов:

bots = []

def Setup_Bot():

    global bots

    _bot = Bot()

    _bot.Connect()

    bots.append(_bot)

if __name__ == "__main__":

    for i in range(5):

        Setup_Bot()

        sleep(1)

    print "Done Setting Up"

Как я смогу заставить это работать?

1 ответ

Решение

Сделать розетку s переменная экземпляра вместо установки ее в классе. Все ваши экземпляры Bot теперь имеют одинаковые атрибуты класса и, следовательно, один и тот же сокет.

class Bot():
    HOST = "localhost"
    PORT = 6667

    def __init__(self):
        self.s = socket.socket()

    def Connect(self):
        self.s.connect((self.HOST, self.PORT))
Другие вопросы по тегам