为啥我的 IRC 机器人无法连接?

Posted

技术标签:

【中文标题】为啥我的 IRC 机器人无法连接?【英文标题】:Why does my IRC bot not connect?为什么我的 IRC 机器人无法连接? 【发布时间】:2011-01-21 20:26:45 【问题描述】:
public static string SERVER = "irc.rizon.net";
private static int PORT = 6667;
private static string USER = "Test C# Irc bot";
private static string NICK = "Testing";
private static string CHANNEL = "#Test0x40"; 

public static void Main(string[] args)

    NetworkStream stream;
    TcpClient irc;
    StreamReader reader;
    StreamWriter writer;

    irc = new TcpClient(SERVER, PORT);
    stream = irc.GetStream();
    reader = new StreamReader(stream);
    writer = new StreamWriter(stream);

    writer.WriteLine("NICK " + NICK);
    writer.Flush();
    writer.WriteLine("JOIN " + CHANNEL);
    writer.Flush(); 

    Console.ReadKey(true);

为什么我的 IRC 机器人无法连接?

【问题讨论】:

是什么让您认为它没有连接?有错误吗? 检查端口 6667 是否被阻塞。就我而言,我位于阻止 6667 的代理服务器后面。所以我无法连接到 6667 上的 IRC。 @Mr.夏普:你的机器人真的没有连接吗?即:如果你/who Testing(我认为这是正确的命令)他不在那里吗?如果您从 StreamReader 读取,您是否从服务器收到任何错误消息? 我建议使用现有的 IRC 客户端库,而不是自己动手。例如thresher.sourceforge.net 【参考方案1】:

IRC 协议需要 CR/LF 对,而 StreamWriter 的默认行为只是换行。你应该像这样创建你的 StreamWriter:

writer = new StreamWriter(stream)  NewLine = "\r\n", AutoFlush = true ;

此外,您可能应该在加入频道之前使用 USER 命令指定用户名,尽管我不确定这是否完全有必要:

writer.WriteLine("USER username +mode * :Real Name");

【讨论】:

后者可以在 RFC 中检查,或者如果您连接到特定的 IRC 守护程序,也可以参考其文档。 您还需要回答在注册之前和注册期间出现的任何 PING。许多 IRC 服务器将这些作为原始反机器人检查发送,简单的机器人不响应并接收 ping 超时或注册超时消息。 PING 将包含必须在您的 PONG 消息中回答的唯一文本。

以上是关于为啥我的 IRC 机器人无法连接?的主要内容,如果未能解决你的问题,请参考以下文章

Winsock - 为啥 ZNC(和 IRC 保镖)不接受我的 winsock 连接?

连接到 IRC 服务器的问题

Python:检查 IRC 连接是不是丢失(PING PONG?)

SSH2 登陆 LOCALHOST 为啥无法登陆?其它机器可以连接

用 gui 制作一个 irc 机器人。在切换按钮切换上断开连接的困难

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