private void SocketContext_PublicIpReceived(object sender, PublicIpEventArgs e)
        {
            ISearchPublicIpContext socketContext = sender as ISearchPublicIpContext;

            if (socketContext != null)
            {
                string currentIp = e.Ip;

                DateTime startTime = DateTime.Now;
                Logger.LogDebug($"Start Time: {startTime.ToLongDateTime()}");

                if (currentIp != CurrentIp)
                {
                    Client.UpdateDomainRecord(currentIp);

                    Logger.LogDebug($"Previous Time: {CurrentTime.ToLongDateTime()}");
                    Logger.LogDebug($"Previous IP: {CurrentIp}");
                }
                else
                {
                    Logger.LogDebug("IP address need not change");
                }

                //Update成功后才能把当前IP/Time存起来
                CurrentTime = startTime;
                CurrentIp   = currentIp;

                Logger.LogDebug($"Current Time: {CurrentTime.ToLongDateTime()}");
                Logger.LogDebug($"Current IP: {CurrentIp}");

                Logger.LogDebug($"End Time: {DateTime.Now.ToLongDateTime()}");
                Logger.LogDebug(string.Empty);
                Logger.LogDebug(string.Empty);
            }
        }
        private void DataReceived(object sender, DataEventArgs e)
        {
            Logger.LogDebug($"Trigger <<{nameof(IClientSession)}>> {nameof(DataReceived)} event begin.");

            var clientSession = sender as IClientSession;

            if (clientSession != null)
            {
                clientSession.Close();

                if (PublicIpReceived != null)
                {
                    byte[] data     = e.Data;
                    string ipString = Encoding.UTF8.GetString(data, 0, 16).Replace("\0", string.Empty);

                    var args = new PublicIpEventArgs
                    {
                        Ip = ipString
                    };

                    try
                    {
                        Logger.LogDebug($"Trigger <<{nameof(IClientSession)}>> {nameof(PublicIpReceived)} event begin.");

                        PublicIpReceived.Invoke(this, args);

                        Logger.LogDebug($"Trigger <<{nameof(IClientSession)}>> {nameof(PublicIpReceived)} event end.");
                    }
                    catch (Exception ex)
                    {
                        Logger.LogDebug(0, ex, "PublicIpReceived event handler error.");
                    }
                }
            }

            _isBreak = true;
            _waitHandle.Set();

            Logger.LogDebug($"Trigger <<{nameof(IClientSession)}>> {nameof(DataReceived)} event end.");
        }