我今天开始尝试制作一个涉及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)
我现在非常确定我正在解决人们在这里发布的虚拟代码(几乎在其他地方.我做错了什么?
解决方法:
仔细看看这行代码:
s.send("".join(["NICK",NICK,"\r\n"]).encode())
如果你用print替换s.send,你会发现它发送的字符串是这样的:
NICKnick<CR><LF>
没有空间!这使得它成为无效命令,并使注册失败.在某些时候,服务器放弃接收您的有效注册,因此向您发送错误并关闭连接.所以请确保包含空格:
s.send("".join(["NICK ",NICK,"\r\n"]).encode())
至少你会发送有效的注册.