private DateTime GetTimeFromServer()
        {
            using (var socket = _adapter.OpenSocket(_host, 123, false))
            {
                socket.DataReceived += OnDataReceived;
                Array.Clear(_packet, 0, _packet.Length);
                _packet[0] = 0xe3; // LI, Version and Mode
                _packet[1] = 0;    // Stratum or type of clock
                _packet[2] = 6;    // Polling interval
                _packet[3] = 0xEC; // Peer clock precision
                // Leave eight bytes of zeros for root delay and root dispersion
                _packet[12] = 49;
                _packet[13] = 0x4E;
                _packet[14] = 49;
                _packet[15] = 52;

                socket.Send(_packet);

#if DEBUG
                _responseReceived.WaitOne();
#else
                // wait for a response
                if (!_responseReceived.WaitOne(5000, false))
                {
                    throw new Exception("No SNTP respose received");
                }
#endif
            }
            var result = _lastTimeRetrieved;
            _lastTimeRetrieved = DateTime.MinValue;
            return(result);
        }
Exemplo n.º 2
0
        private ISocket GetSocket(string host, int port)
        {
            var socket = _adapter.OpenSocket(host, port, true);

            socket.SocketClosed += SocketOnSocketClosed;
            socket.DataReceived += SocketOnDataReceived;
            return(socket);
        }