IRC标识问题
本文关键字:问题 标识 IRC | 更新日期: 2023-09-27 17:58:56
这就是我得到的:
:portlane.esper.net NOTICE * :*** Looking up your hostname...
:portlane.esper.net NOTICE * :*** Checking Ident
:portlane.esper.net NOTICE * :*** Found your hostname
:portlane.esper.net NOTICE * :*** No Ident response
我知道我需要在tcp:113上听和写,但我不知道我应该使用什么方法,也不知道我需要做什么。这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
namespace Bot
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ConnectToServer(object sender, EventArgs e)
{
string Server = "irc.esper.net";
int Port = 5555;
string Nick = Nickname.Text;
string Channel = ChannelName.Text;
TcpClient IRCClient = new TcpClient(Server, Port);
NetworkStream Stream = IRCClient.GetStream();
StreamWriter Writer = new StreamWriter(Stream);
Writer.NewLine = "'n'r";
Writer.AutoFlush = true;
Writer.WriteLine("/USER Bot Bot Bot :Bot");
Writer.WriteLine("/nick " + Nick);
Writer.WriteLine("/join " + Channel);
Writer.WriteLine("Hello.");
StreamReader Reader = new StreamReader(Stream);
while (true)
{
Console.WriteLine(Reader.ReadLine());
}
Reader.Close();
Writer.Close();
Stream.Close();
IRCClient.Close();
Console.WriteLine("End of stream.");
}
}
}
如果你们中的任何一个人不介意的话,我们将不胜感激。
谢谢,
~abcd3fg
如果您真的想发送ident响应(这通常是不需要的,而且通常很困难,因为您需要有一个可以从Internet访问的端口),您需要让一个单独的TCP服务器侦听端口113并实现ident协议。您可以使用System.Net.Sockets.TcpListener
作为服务器的基础(请注意,您要么需要处理阻塞等问题,要么将其作为一个单独的可执行文件)。对于协议本身,你可以直接在RFC 1413
中查看(该协议是基于行的,非常简单,尤其是你不需要正确实现它,只需要返回一个静态的假响应)。不过,我不确定你是否需要一个ident服务器,即使你这样做了,你也需要自己实现它。
首先,你不发送/命令,你必须发送正确的IRC命令。阅读关于它的RFC。客户端执行/命令,但它发送到实际服务器的内容不同。IE:"尼克·纽尼克",而不是"/NICK newnick"