Как стать автором
Обновить

Tcp Ping или проверка доступности удаленного сервиса

Понадобилось мне недавно какая-нибудь утилита, для проверки доступности удаленного сервера. Вроде все просто, запусти ping и все, но оказалось не так просто, на удаленной машине отключен ответ на ICMP запросы.

Немного поискав в сети понял, что мне нужен tcpping, но ничего подходящего не нашлось. Решил писать сам, в качестве среды разработки выбран MS Visual Studio 2010 Express.

Требования к проекту были простые:
  • Ведение статистики доступности удаленного сервера
  • обычный ping
  • TcpPing — по указанному порту
  • Параллельный мониторинг нескольких серверов
  • Небольшая визуализация текущего состояния

При помощи статей MSDN обычный ICMP ping был реализован быстро, а вот с tcp пришлось повозиться, так как такой функции нет. Реализацию делал на основе Socket.Connect. Получилась следующая функция.

private int pingtcp(string server)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
bool ConState = true;
sock.LingerState = new LingerOption(true, 2);
sock.NoDelay = true;
char[] delimiterChars = { ':' };
string[] srv = server.Split(delimiterChars);
try
{ sock.Connect(srv[0], int.Parse(srv[1])); }
catch (SocketException ex)
{ ConState = false; }
catch (Exception ex)
{ ConState = false; }
finally
{
if (sock.Connected)
{ sock.Close();
ConState = true; }
else
{ ConState = false; }
}
if (ConState == true)
{ Thread.Sleep(250);
return 1; }
else { return -1; }
}

Пока она только возвращает состояние подключения, но сейчас работаю над определением времени подключения, по типу времени обычного ping.

Весь код и само приложение можно взять тут.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.