在Python中多个套接字/重用/关闭套接字?_socketobject错误

3 投票
1 回答
1356 浏览
提问于 2025-04-16 23:45

我一直在尝试用Python制作一个机器人,这个机器人通过套接字(socket)在网站的聊天中获取一些信息。这需要先登录,登录后会得到一些密钥,然后用这些密钥连接到聊天(使用不同的套接字/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

你之前导入了一个叫做socket的模块。然后你创建了一个全局变量,也叫“socket”,这个变量现在替代了之前的模块。结果,模块消失了,现在变成了一个socket对象。当你第二次尝试调用socket的时候,发现全局的socket不再是模块,而是那个socket实例了。

建议你用一个不同的名字,或者更好的办法是把你的整个客户端放到另一个类里面。

撰写回答