Azure で運用している Web サービスに手元のマシンからアクセスできないとき、まず ping を試したいところだけど、Azure は ping を通さない。そのため TCP 版 ping とも言える PsPing を使うことになる。
PsPing っぽいことを C# のプログラムでも行ないたい。試しに書いてみた。
using System.Diagnostics; using System.Net.Sockets; if (args.Length != 2) { Console.WriteLine("TcpPing.exe <host> <port>"); return; } var host = args[0]; if (!int.TryParse(args[1], out var port)) { Console.WriteLine("TcpPing.exe <host> <port>"); return; } var times = new List<double>(); for (var i = 0; i < 5; i++) { var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Blocking = true; var sw = Stopwatch.StartNew(); socket.Connect(host, port); sw.Stop(); var t = sw.Elapsed.TotalMilliseconds; Console.WriteLine($"{t:0.00}ms"); times.Add(t); socket.Close(); Thread.Sleep(1000); } Console.WriteLine($"Min:{times.Min():0.00}ms, Max:{times.Max():0.00}ms, Average:{times.Average():0.00}ms");
.NET 6 で実行。