Python IRC bot 在 3 次 ping 后断开连接

Posted

技术标签:

【中文标题】Python IRC bot 在 3 次 ping 后断开连接【英文标题】:Python IRC bot disconnecting after 3 pings 【发布时间】:2014-09-12 22:19:37 【问题描述】:

所以我编写了一个小型 twitch irc 机器人,但它断开了连接,机器人只是保持 ping 的状态,在 3 次 pong 之后,我的机器人从 twitch 接收到 0 数据并从查看器列表中消失。

这是代码(重要部分):

readbuffer = ""
while (1):
        readbuffer=readbuffer+s.recv(4000)
        temp=string.split(readbuffer, "\n")
        readbuffer=temp.pop( )
        for line in temp:
            print line
            elif(line[0]=="PING"):
                s.sendall("PONG %s\r\n" % line[1])

它是一个使用不同参数作为线程部署 2 次的函数..

问题是我首先在 twitch.tv 查看器列表中看到 2 个机器人大约 5 分钟,然后在 3 次 ping 之后完全 twitch 不再 ping 或发送任何东西。

如果您想了解更多信息,请向我索取更多代码。

【问题讨论】:

你确定它实际上是在发送任何响应/line[0] 不是单个字符吗? 我会尝试使用 if('PING' in line): 还是一样,会不会是twitch那边的问题? 我 90% 确定您的缓冲区逻辑已损坏。请看我的回答。 不要将答案/cmets 放在问题的答案中。如果您有解决方案,您可以回答您自己的问题。 【参考方案1】:

也许不相关:

将套接字解释为文件:https://docs.python.org/2/library/socket.html#socket.socket.makefile

f = s.makefile()
for line in f:
    print 'Read:', line
    command, arguments = line.rstrip().split(' ', 2)
    if command == 'PING':
         f.write('PONG ' + arguments + '\r\n')

这让很多事情变得如此简单。如果问题仍然存在,请尝试并发表评论。

【讨论】:

现在尝试这个需要一些时间 修复问题并解决了更大的问题。我收到一个错误,连接被主机中的软件强行关闭。连接被远程主机中止,分别出现错误 10053 和 10054。可能是 Windows 问题 对不起,我对 Windows 套接字一无所知。我只在 Linux 和 *BSD 上编程。

以上是关于Python IRC bot 在 3 次 ping 后断开连接的主要内容,如果未能解决你的问题,请参考以下文章

Twisted Python IRC Bot - 如何在 bot 运行命令时监听命令?

Python IRC bot + SQLAlchemy - 多渠道跟踪用户

Discord Bot 在被烧瓶服务器 ping 后总是说它在线很多次 - PYTHON

IRC Bot - 防洪(python)

Python3 webserver 在 IRC bot 的线程之间进行通信

Twisted irc python bot - 缓冲消息