发送CTCP消息

时间:2013-12-05 18:52:52

标签: c# unicode

我目前正在开发一个关于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

编辑:我已经用我希望的所有相关变量和方法更新了代码

1 个答案:

答案 0 :(得分:0)

嗯,我觉得自己像个白痴,但至少我明白了。我已将其更改为使用'\ u0001'作为字符,并且(等待它...)我删除了:和控制字符之间的空格。它现在功能完美。