Делаю консольное приложение, которое должно проверять подключение к определенному IP и выполнять определенные действия. Как мониторить такое подключение? Тут выводится список всех исходящих, как отфильтровать и оставить только одно?
static void ListAvailableTCPPort(ref ArrayList usedPort)
{
IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
IEnumerator myEnum = tcpConnInfoArray.GetEnumerator();
while (myEnum.MoveNext())
{
TcpConnectionInformation TCPInfo = (TcpConnectionInformation)myEnum.Current;
Console.WriteLine("{0}", TCPInfo.RemoteEndPoint);
usedPort.Add(TCPInfo.LocalEndPoint.Port);
}
}
public static void Main()
{
ArrayList usedPorts = new ArrayList();
ListAvailableTCPPort(ref usedPorts);
Console.ReadKey();
}
Ответ
Если вам необходимо проверять подключение к определенному IP-адресу,то вы должны фильтровать
1. поле RemoteEndPoint - указывает на IP-адрес и порт TCP-соединения, который вас интересует
2. У подключения должно быть состояние(State)- Established,
которое означает что соединение установлено и данные могут быть
отправлены.
Вот пример кода:
static void SearchAvailableTCPConnection(ref ArrayList usedPort, string searchAddress, int searchPort)
{
IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint filterEndpoint = new IPEndPoint(IPAddress.Parse(searchAddress), searchPort);
TcpConnectionInformation tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections().Where(g => g.RemoteEndPoint.Equals(filterEndpoint) && g.State ==TcpState.Established).FirstOrDefault();
if (tcpConnInfoArray != null)
{
Console.WriteLine("Port {0} {1} {2} ", tcpConnInfoArray.LocalEndPoint, tcpConnInfoArray.RemoteEndPoint, tcpConnInfoArray.State);
}
}
private static void Main(string[] args)
{
ArrayList usedPorts = new ArrayList();
SearchAvailableTCPConnection(ref usedPorts, "192.168.0.2", 8090);
Console.ReadKey();
}
На экран будет выведено сообщение только в том случае, если у нас есть активное TCP-соединение с IP-адресом 192.168.0.2 по порту 8090.
Для конвертации строки IP-адреса в класс IPAddress, используем статическую функцию этого класса Parser
Комментариев нет:
Отправить комментарий