Понадобилось мне недавно какая-нибудь утилита, для проверки доступности удаленного сервера. Вроде все просто, запусти ping и все, но оказалось не так просто, на удаленной машине отключен ответ на ICMP запросы.
Немного поискав в сети понял, что мне нужен tcpping, но ничего подходящего не нашлось. Решил писать сам, в качестве среды разработки выбран MS Visual Studio 2010 Express.
Требования к проекту были простые:
При помощи статей MSDN обычный ICMP ping был реализован быстро, а вот с tcp пришлось повозиться, так как такой функции нет. Реализацию делал на основе Socket.Connect. Получилась следующая функция.
Пока она только возвращает состояние подключения, но сейчас работаю над определением времени подключения, по типу времени обычного ping.
Весь код и само приложение можно взять тут.
Немного поискав в сети понял, что мне нужен 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.
Весь код и само приложение можно взять тут.