【问题标题】:(C#) TcpClient does not connect to irc server (Using a number ip)(C#) TcpClient 不连接 irc 服务器(使用数字 ip)
【发布时间】:2016-04-01 07:24:36
【问题描述】:

所以,我一直在尝试制作一个连接到本地 irc 服务器的机器人。问题是,如果我调用使用构造函数创建的“Irc.cs”类,例如:Irc irc = new Irc("192.168.1.2", 6667); irc.joinChannel("#test"),它不会出现在 irc 服务器频道上。问题是我认为它没有连接失败,因为如果我输入Irc irc = new Irc("192.168.1.11", 6667)(它不是服务器)它会引发异常,但服务器不会。如果有人可以提供帮助,我会很高兴:) 这是“Irc.cs”的代码

        public IrcBot(String ip, int port, String nickName)
    {

        tcpClient = new TcpClient(ip, port);
        inputStream = new StreamReader(tcpClient.GetStream());
        outputStream = new StreamWriter(tcpClient.GetStream());

        outputStream.WriteLine("NICK " + nickName);
        outputStream.WriteLine("USER " + nickName + " 8 * : " + nickName);
        outputStream.Flush();
    }

        public void joinRoom(String channel)
    {
        this.channel = channel;

        outputStream.WriteLine("JOIN " + channel);
        outputStream.Flush();
    }

【问题讨论】:

  • PS:端口 6667 已打开。我可以使用 mIRC 连接到我的普通电脑上的 irc 服务器(托管在 VM 上)
  • 只是一个疯狂的猜测,但也许你发送加入命令太早了。我知道连接到 IRC 服务器需要一些时间。现在你不需要等待任何回应。除此之外,我建议关闭和处理流(例如使用 using)
  • @RonDeijkers 好的,我将如何检查我是否收到回复
  • 通过读取输入流。我不知道 IRC 协议,所以我不知道会返回哪些命令。彻底阅读 IRC 协议可以回答这个问题,您还可以将 WireShark 与诸如 mIRC 之类的 IRC 客户端结合使用来检查通信是如何工作的。不过,我也确实认为所有 IRC 服务器很可能都会检查机器人。
  • @RonDeijkers 我自己的服务器会自行阻止机器人吗?

标签: c# visual-studio tcpclient bots irc


【解决方案1】:

这里有一个重要的事情是 IRC 使用 CR/LF 而不是 StreamWriters 使用的 LF,所以你需要像这样创建一个 StreamWriter:

writer = new StreamWriter(stream) { NewLine = "\r\n" };

这样它将在每行的末尾发送 CR/LF。

【讨论】:

  • 好的。它仍然没有在频道中显示为机器人。
  • 现在显示正在工作...:irc.test.com NOTICE * :*** Looking up your hostname... :irc.test.com NOTICE * :*** Couldn't resolve your hostname; using your IP address instead PING :B6598BF5 ThisIsANames 是我设置的昵称 错误:关闭链接:ThisIsANames[192.168.1.5](注册超时)
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多