0

我在 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"

我怎样才能让它工作?

4

1 回答 1

2

使套接字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))
于 2016-11-05T15:53:18.127 回答