一个喜剧简单的python程序上的IRC连接错误

时间:2014-08-13 01:51:40

标签: python irc

我今天开始尝试制作一个涉及IRC日志的相对复杂的程序。无论我做了什么,我都得到了:

['ERROR', ':Closting', 'Link:', *******identifying details**********,'(Connection', 'timed', 'out')'

我认为简化一切都可以帮助我从中学习,但即使有这个非常简单的程序,我仍然会收到这个错误:

import sys
import socket
import string

HOST="irc.freenode.net"
PORT=6667
NICK="nick"
IDENT="nick"
REALNAME="realname"
readbuffer=""

s=socket.socket( )
s.connect((HOST, PORT))
s.send("".join(["NICK",NICK,"\r\n"]).encode())
s.send("".join(["USER %s %s bla :%s\r\n" % (IDENT, HOST, REALNAME)]).encode())

while 1:
    readbuffer=readbuffer+s.recv(1024).decode()
    temp=str.split(readbuffer, "\n")
    readbuffer=temp.pop( )

    for line in temp:
        line=str.rstrip(line)
        line=str.split(line)
        if(line[0]=="PING"):
            s.send("".join(["PONG ",line[1], "\r\n"]).encode())
        print (line)

我非常确定我正在调整人们在这里发布的虚拟代码(几乎在其他地方。我做错了什么?

1 个答案:

答案 0 :(得分:1)

仔细查看这行代码:

s.send("".join(["NICK",NICK,"\r\n"]).encode())

如果您将s.send替换为print,您会发现它正在发送这样的字符串:

NICKnick<CR><LF>

没有空间!这使得它成为无效命令,并使注册失败。在某些时候,服务器放弃接收您的有效注册,因此向您发送错误并关闭连接。因此,请确保包含空格:

s.send("".join(["NICK ",NICK,"\r\n"]).encode())

至少你会发送有效的注册。