コード例 #1
0
ファイル: SNTPData.cs プロジェクト: ounata/AK47-2016Source
        // Internal Methods 

        /// <summary>
        /// A SNTPData that is used by a client to send to a server to request data.
        /// </summary>
        internal static SNTPData GetClientRequestPacket(VersionNumber versionNumber)
        {
            SNTPData packet = new SNTPData();

            packet.Mode             = Mode.Client;
            packet.VersionNumber    = versionNumber;
            packet.TransmitDateTime = DateTime.Now.ToUniversalTime();
            return(packet);
        }
コード例 #2
0
ファイル: SNTPClient.cs プロジェクト: HarveyHuBJ/AK47Source
        /// <summary>
        /// This is the 'nuts and bolts' method that queries the server.
        /// </summary>
        /// <returns>A QueryServerResults instance that holds the results of the query.</returns>
        private QueryServerCompletedEventArgs QueryServer()
        {
            QueryServerCompletedEventArgs result = new QueryServerCompletedEventArgs();

            Initialize();
            using (UdpClient client = new UdpClient())
            {
                try
                {
                    // Configure and connect the socket.
                    IPEndPoint ipEndPoint = RemoteSNTPServer.GetIPEndPoint();
                    client.Client.SendTimeout    = (int)this.Timeout.TotalMilliseconds;
                    client.Client.ReceiveTimeout = (int)this.Timeout.TotalMilliseconds;
                    client.Connect(ipEndPoint);

                    // Send and receive the data, and save the completion DateTime.
                    SNTPData request = SNTPData.GetClientRequestPacket(this.VersionNumber);
                    client.Send(request, request.Length);
                    result.Data = client.Receive(ref ipEndPoint);
                    result.Data.DestinationDateTime = DateTime.Now.ToUniversalTime();

                    // Check the data
                    if (result.Data.Mode == Mode.Server)
                    {
                        result.Succeeded = true;

                        // Call other method(s) if needed
                        if (this.UpdateLocalDateTime)
                        {
                            this.UpdateTime(result.Data.LocalClockOffset);
                            result.LocalDateTimeUpdated = true;
                        }
                    }
                    else
                    {
                        result.ErrorData = new ErrorData("The response from the server was invalid.");
                    }
                    return(result);
                }
                catch (Exception ex)
                {
                    result.ErrorData = new ErrorData(ex);
                    return(result);
                }
            }
        }