在Python中多个套接字/重用/关闭套接字?_socketobject错误
我一直在尝试用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实例了。
建议你用一个不同的名字,或者更好的办法是把你的整个客户端放到另一个类里面。