C# でPsPing もどき

Azure で運用している Web サービスに手元のマシンからアクセスできないとき、まず ping を試したいところだけど、Azure は ping を通さない。そのため TCPping とも言える 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 で実行。