https://teratail.com/questions/203549
// NTPサーバへの接続用UDP生成 var ip = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0); var udp = new System.Net.Sockets.UdpClient(ip); // NTPサーバへのリクエスト送信 var sendData = new Byte[48]; sendData[0] = 0xB; udp.Send(sendData, 48, "time.windows.com", 123); // NTPサーバから日時データ受信 var receiveData = udp.Receive(ref ip); // 1900年1月1日からの経過秒数計算 var totalSeconds = (long)( receiveData[40] * Math.Pow(2, (8 * 3)) + receiveData[41] * Math.Pow(2, (8 * 2)) + receiveData[42] * Math.Pow(2, (8 * 1)) + receiveData[43]); var utcTime = new DateTime(1900, 1, 1).AddSeconds(totalSeconds); // 協定世界時 (UTC) からローカルタイムゾーンへの変更 var localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local);
インターネットにオンラインの状態で、実行すると、
このコードで時刻を取得できます。
インターネットに繋がっていないオフライン状態で実行すると、
下記のエラーとなります。
System.Net.Dns.Error_11001 (System.String hostName) (at <aa976c2104104b7ca9e1785715722c9d>:0)
System.Net.Dns.GetHostByName (System.String hostName) (at <aa976c2104104b7ca9e1785715722c9d>:0)
System.Net.Dns.GetHostEntry (System.String hostNameOrAddress) (at <aa976c2104104b7ca9e1785715722c9d>:0)
System.Net.Dns.GetHostAddresses (System.String hostNameOrAddress) (at <aa976c2104104b7ca9e1785715722c9d>:0)
System.Net.Sockets.UdpClient.Send (System.Byte[] dgram, System.Int32 bytes, System.String hostname, System.Int32 port) (at <aa976c2104104b7ca9e1785715722c9d>:0)
下記のエラーが発生したかどうかを、IF文で場合分けは可能でしょうか?
System.Net.Dns.Error_11001
その場合、どういうコードにしたらいいのでしょうか?
オフラインの場合、この部分でエラーが発生します。
udp.Send(sendData, 48, "time.windows.com", 123);
この部分でエラーが発生した場合、発生しなかった場合で
IF文で場合分けというのは可能でしょうか?
インターネットの状態がオンラインかオフラインかどうかの場合分けではなく、
udp.Send(sendData, 48, "time.windows.com", 123);
この部分でのエラーの発生の有無で、場合分けをしたいです。