【问题标题】:How to reconnect when irc client times out (Ping timeout: 240 seconds)irc客户端超时时如何重新连接(Ping超时:240秒)
【发布时间】:2015-03-27 18:05:07
【问题描述】:

我正在使用ircdotnet 库,我正在尝试在超时时重新连接,但是当我在 IRC 中超时时,客户端无法识别它已断开连接,我的代码有什么问题,我该如何重新连接什么时候超时?

namespace IRCBOT
{
    class Program
    {
        public IrcClient zIrcClient = new IrcClient();
        static void Main(string[] args)
        {
            Connect();
        }
        public static void Connect()
        {

            Program p = new Program("irc.server.net", new IrcUserRegistrationInfo()
            {
                NickName = "justatest",
                UserName = "test",
                RealName = "test",
                Password = ""
            });
        }
        public Program(string host, IrcRegistrationInfo info)
        {
            try
            {
                zIrcClient.Connect(host, 6667, false, info);
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + "Connecting");
                zIrcClient.Connected += ircClient_Connected;
                zIrcClient.Registered += ircClient_Registered;
                while (true)
                {
                    if (!zIrcClient.IsConnected)
                    {
                        zIrcClient.Disconnected += ircClient_Disconnected;
                    }
                    string text = Console.ReadLine();
                    if (text == "/quit")
                    {
                        zIrcClient.Quit();
                        break;
                    }
                    else
                    {
                        zIrcClient.LocalUser.SendMessage("#testchamber", text);
                    }
                }
                Console.ReadKey();
                zIrcClient.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                Console.ReadKey();
            }
        }
        private void ircClient_Connected(object sender, EventArgs e)
        {
            try
            {
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + "Connected");
            }
            catch (Exception ex) { 
                Console.WriteLine("Error: " + ex.Message);
                Console.ReadKey();
            }
        }
        private void ircClient_Disconnected(object sender, EventArgs e)
        {
            try
            {
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + "Disconnected");
                zIrcClient.Connected -= ircClient_Connected;
                zIrcClient.Registered -= ircClient_Registered;
                zIrcClient.Disconnected -= ircClient_Disconnected;
                zIrcClient.Dispose();
                Connect();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                Console.ReadKey();
            }
        }
    }
    private void ircClient_Registered(object sender, EventArgs e)
    {
        zIrcClient.Channels.Join("#testchamber");
    }
}

【问题讨论】:

    标签: c# reconnect


    【解决方案1】:

    您确定 Disconnected 事件在发生时已连接到您的事件处理程序吗? 也许不是有条件地连接您的事件处理程序,

    if (!zIrcClient.IsConnected)
    {
        zIrcClient.Disconnected += ircClient_Disconnected;
    }
    

    您可以像其他事件处理程序一样连接它:

    zIrcClient.Connected += ircClient_Connected;
    zIrcClient.Registered += ircClient_Registered;
    zIrcClient.Disconnected += ircClient_Disconnected;
    

    【讨论】:

    • 不,没用,好像不知道断线了。
    • ircClient_Disconnected 事件不会以这种方式调用...还有其他人有想法吗?
    • 是否会发生某种 ircClient_Timeout 事件?
    • 现在无法检查,我正在度假,但我会在回来时检查它,但如果我没记错的话没有
    • 没有这样的事件:(这里是文档:nudoq.org/#!/Projects/IrcDotNet
    猜你喜欢
    • 2012-06-07
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多