为啥我的 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 连接?
Python:检查 IRC 连接是不是丢失(PING PONG?)
SSH2 登陆 LOCALHOST 为啥无法登陆?其它机器可以连接