【问题标题】:IRC Bot not identifying with server - Connection hangsIRC Bot 无法识别服务器 - 连接挂起
【发布时间】:2011-04-03 21:40:49
【问题描述】:

当我尝试使用 C# 中的简单 IRC 机器人连接到 freenode 时,我收到以下消息:

:asimov.freenode.net NOTICE * :* 正在查找您的主机名...

:asimov.freenode.net NOTICE * :* 检查身份

:asimov.freenode.net 注意 * :* 无法查找您的主机名

:asimov.freenode.net NOTICE * :* 没有 Ident 响应

然后在大约 30 秒后,程序终止。

我尝试在 NICK 消息之前发送 USER 消息,并且还尝试手动将回车符“\r\n”附加到行尾,而不是在 StreamWriter 选项中指定它。关于可能导致此行为的其他事情的任何想法?

这是我当前的代码:

        socket = new TcpClient(host, port);
        socket.ReceiveBufferSize = 1024;
        Console.WriteLine("Connected");
        NetworkStream stream = socket.GetStream();
        reader = new StreamReader(stream);
        writer = new StreamWriter(stream) { NewLine = "\r\n", AutoFlush = true };
        writer.Write("NICK " + user);
        writer.Write("USER " + user + " 8 * :" + user);
        writer.Write("JOIN " + chan);
        //System.Threading.Thread.Sleep(5000);

        while(running)
        {
            line = reader.ReadLine();
            Console.WriteLine(line);
        }

**已修复 - 使用 .WriteLine 修复它。谢谢!

【问题讨论】:

  • 如果您使用 Wireshark 或类似工具进行数据包嗅探,您是否看到实际发送的数据?我怀疑它在某处的缓冲区中。
  • 我认为你应该使用 .WriteLine 而不是 .Write 如果你希望 streamwriter 将 \r\n 附加到每一行并刷新它。
  • 尝试使用writer.WriteLine 确保在末尾附加换行符。编辑:@Ravadre 的 Ninja'd :)
  • @Harpyon:是的,我变成了 1 分钟忍者 :-)
  • 您需要响应 PING。否则你会很快被踢。我不记得在注册之前是否会发生 PING。

标签: c# irc


【解决方案1】:

您没有刷新缓冲区。使用 writer.Flush();每次写入之后。

例子:

writer.Write("NICK {0}\r\n", user);
writer.Flush();

或者

writer.WriteLine("NICK {0}", user);
writer.Flush(); // Maybe here you will not need to flush because of the autoflush

【讨论】:

    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2011-05-12
    • 2013-11-21
    • 2015-03-10
    • 2013-02-04
    • 2010-12-12
    相关资源
    最近更新 更多