См. Socket.Connect
public static void Connect1(string host, int port)
{
IPAddress[] IPs = Dns.GetHostAddresses(host);
Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
Console.WriteLine("Establishing Connection to {0}",
host);
s.Connect(IPs[0], port); // Catch any exceptions here.
Console.WriteLine("Connection established");
}
Отправляя эхо-запрос на сервер, вы можете получить информацию о том, включен ли сервер или нет; он не указывает, работает ли служба, к которой вы пытаетесь подключиться, или нет.
если вам нужен первый вариант (общее представление о том, включен ли сервер и подключен ли он к Интернету), для этой задачи будет достаточно pinging.
Что касается эффективности - пинг более эффективен (ну, в больших масштабах), поскольку между сервером и клиентом обмениваются только 2 пакета, а не полное установление соединения, которое составляет около 3 пакетов -
См. TCP 3-Way рукопожатие