IRC机器人:错误-注册超时。

6
我正在用C语言制作一个简单的IRC机器人。最终我成功让机器人连接并接收信息。我的代码也应该发送信息,但服务器好像没有发送任何东西。当机器人连接时,我会收到以下内容:
Recieved: :roc.esper.net NOTICE AUTH :*** Looking up your hostname... Recieved: :roc.esper.net NOTICE AUTH :*** Found your hostname 此时我的代码会发送以下内容:
Sent: NICK Goo
Sent: USER Goo * * :Goo
通过使用wireshark,我确定这是在初始连接后应该发送的注册信息。然而,我不确定数据是否实际发送或者它是否无效?因为大约30秒后,我还会收到以下内容:
Recieved: ERROR :Closing Link: c-68-33-143-182.hsd1.md.comcast.net (Registration timed out)
然后我的程序就会关闭。
有其他人了解IRC中的编程认证/注册过程吗?或者有其他有用的想法吗?
谢谢!
**编辑** 已解决。我需要在每行末尾发送行终止符。 \r\n
3个回答

4

roc.esper.net 的 Telnet:

~$ telnet roc.esper.net 6667
Trying 198.247.173.216...
Connected to roc.esper.net.
Escape character is '^]'.
:roc.esper.net NOTICE AUTH :*** Looking up your hostname...
:roc.esper.net NOTICE AUTH :*** Found your hostname
NICK Goo
USER Goo * * :Goo
PING :268966433
PONG :268966433

我已经发送了NICK、USER和PONG。之后会跟随欢迎消息:
:roc.esper.net 001 Goo :Welcome to the EsperNet Internet Relay Chat Network Goo
:roc.esper.net 002 Goo :Your host is roc.esper.net[198.247.173.216/6667], running version esphyb-1.0.1

等等,检查PING-PONG是否正常,确保你的消息发送正确(特别是在结尾处加上CR/LF或'\n')。

顺便说一下,如果我没有发送任何消息,甚至没有PONG,我会收到“注册超时”的提示,但一旦我回答了PING,就不再有超时问题(至少在30秒之后没有)。


2

在发送NICK命令之前,请尝试发送USER命令。您正在尝试连接到哪个IRC网络?

"
> telnet irc.freenode.net 6667
NOTICE AUTH :*** Looking up your hostname...
NOTICE AUTH :*** Checking ident
NOTICE AUTH :*** No identd (auth) response
NOTICE AUTH :*** Couldn't look up your hostname
USER x x x x
NICK hwjrh
:kubrick.freenode.net 001 hwjrh :Welcome to the freenode IRC Network hwjrh
:kubrick.freenode.net 002 hwjrh :Your host is kubrick.freenode.net[kubrick.freenode.net/6667], running version hyperion-1.0.2b
"

对我来说没问题;我经常使用telnet连接到Freenode、Undernet和Dalnet...


是的,我也一样,即使对于roc.esper.net也是如此,但在发送NICK之后,您会收到一个必须回答的PING。之后,一切都运行正常。 - schnaader
它对我仍然不起作用。它仍然在做以前的事情。我没有收到PING。它只是超时了。 - The.Anti.9
2
也许你的消息有问题。你在结尾处也发送了CR/LF吗?如果可能的话,也尝试使用telnet,这样你就可以看到是否对你而言甚至这也失败了。 - schnaader
schnaader提出了一个很好的观点。尝试在行末发送CR或LF或CR/LF。 - Tom

1
从我看过的教程(比如这个)来看,你似乎做得没错,只是这里
USER Goo * * :Goo

USER Goo 0 * :Goo

在我看过的所有教程中都提到了这点。

另外,别忘了后面的PING-PONG,但是这不需要用于注册(编辑:看起来这是错误的,发送NICK后立即需要PONG)。

我猜你知道RFC 1459,这对你也有很大帮助。


你检查PING了吗?如果你在注册时没有PONG,似乎会出现那个错误信息。 - schnaader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接