我目前正在开发一个关于C#的入门课程的项目。我们的想法是创建一个连接到单个irc服务器上的单个通道的基本irc客户端。大多数事情都很容易实现,但是,在尝试发送CTCP消息时,我遇到了困难。
格式应为:PRIVMSG目标:/ U + 0001ACTION消息/ U + 0001
我可以使用Unicode控制字符识别这些消息,但是每当我尝试发送自己的“ACTION消息”时,都会收到。
这是我用来发送消息的代码:
private TcpClient irc; //declarations of properties of irc class
private NetworkStream stream;
private string _inputLine;
StreamReader reader;
StreamWriter writer;
public void Connect() //connects to the irc server in _server on port _port
{
irc = new TcpClient(_server, _port);
stream = irc.GetStream();
reader = new StreamReader(stream);
writer = new StreamWriter(stream);
Send("NICK " + Nick);
Send("USER " + Nick + " 0 * :" + Nick);
Listen();
OnConnect();
}
private void button1_Click(object sender, EventArgs e) //method is from a windows form
{
if (txtMessage.Text.StartsWith("/me"))//sends contents of textbox to SendCTCP if it is an action message
{
test.SendCTCP("ACTION " + txtMessage.Text.Remove(0, 3));
OnAction(test.Nick, txtMessage.Text.Remove(0, 3)); //method OnAction is within the widows form and outputs the message in a textbox for messages sent/received to the channel
}
else
{
test.SendMessage(txtMessage.Text);
ChannelTest(test.Nick, txtMessage.Text, null);
}
txtMessage.Text = "";
}
public void SendCTCP(string message) //formats message with /U+0001 characters
{
char control = '\x01';
Send("PRIVMSG " + _channel + " : " + control.ToString() + message + control.ToString());
}
public void Send(string message) //sends message to server using StreamWriter writer
{
writer.WriteLine(message);
writer.Flush();
}
Send方法使用StreamWriter将消息发送到服务器。
我尝试过使用和不使用ToString()。我在发送块中尝试了字符本身,而不是在控件中。我已经尝试了我能找到的角色的每一个表现形式,但我一直无法使它发挥作用。任何帮助将不胜感激。
当服务器将消息发送到同一频道中的其他客户端时,通过客户端结果发送测试消息“/ me tests”:IRCTest!IRCTest @ mask PRIVMSG #Channel:ACTION tests
我可以找到的每个客户解释为::ACTION tests
编辑:我已经用我希望的所有相关变量和方法更新了代码
答案 0 :(得分:0)