Here is a good example .
For completeness, here is the code from the blog article:
public DateTime GetNTPTime()
{
byte[] ntpPacket = new byte[] { 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
IPAddress[] addressList = Dns.GetHostEntry("pool.ntp.org").AddressList;
if (addressList.Length == 0)
{
return DateTime.MinValue;
}
IPEndPoint ep = new IPEndPoint(addressList[0], 123);
UdpClient client = new UdpClient();
client.Connect(ep);
client.Send(ntpPacket, ntpPacket.Length);
byte[] data = client.Receive(ref ep);
byte[] endianSeconds = new byte[4];
endianSeconds[0] = data[32 + 3];
endianSeconds[1] = data[32 + 2];
endianSeconds[2] = data[32 + 1];
endianSeconds[3] = data[32 + 0];
uint seconds = BitConverter.ToUInt32(endianSeconds, 0);
return (new DateTime(1900, 1, 1)).AddSeconds(seconds);
}