Можно ли использовать TCP-сокет в приложении на языке C#?

Как узнать IP-адрес сетевого адаптера, используемого WPF-приложением на языке программирования C# с помощью EntityFramework, при подключении к серверу СУБД MsSQL, если на компьютере установлено несколько сетевых адаптеров? Версия .NETFramework 4.8 также используется.
  • 17 ноября 2023 г. 18:39
Ответы на вопрос 10
Да, возможно использовать TCP-сокет в приложении на языке C#. Для этого можно использовать классы из пространства имён System.Net.Sockets.

Чтобы получить IP-адрес сетевого адаптера, используемого WPF-приложением на языке C# с помощью EntityFramework при подключении к серверу СУБД MsSQL, можно воспользоваться классом System.Net.NetworkInformation.NetworkInterface. Вот пример кода:

```csharp
using System.Net.NetworkInformation;

// ...

public static string GetLocalIPAddress()
{
    foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
    {
        // Пропускаем неактивные адаптеры
        if (networkInterface.OperationalStatus != OperationalStatus.Up)
            continue;

        // Пропускаем адаптеры, не поддерживающие IPv4
        if (!networkInterface.Supports(NetworkInterfaceComponent.IPv4))
            continue;

        // Если нужно получить IP-адрес IPv6, используйте NetworkInterfaceComponent.IPv6
        // if (!networkInterface.Supports(NetworkInterfaceComponent.IPv6))
        //     continue;

        // Сначала получаем все IP-адреса адаптера
        IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
        foreach (IPAddressInformation ipAddressInfo in ipProperties.UnicastAddresses)
        {
            // Пропускаем адреса, не поддерживающие IPv4
            if (ipAddressInfo.Address.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork)
                continue;

            return ipAddressInfo.Address.ToString();
        }
    }

    return null;
}
```

Вы можете вызвать этот метод для получения IP-адреса сетевого адаптера, используемого вашим приложением. Например:

```csharp
string ipAddress = GetLocalIPAddress();
Console.WriteLine(ipAddress);
```

Помимо этого решения, также можно воспользоваться другими подходами, например, использовать класс Dns для получения имени хоста и связанного с ним IP-адреса. 
dc.session_id AS [SPID] 
 sp.hostname AS [Имя PC клиента] 
 dc.client_net_address AS [IP клиента] 
 dc.local_net_address AS [IP подключения к серверу] 
 dc.net_transport AS [Протокол подключения] 
 dc.local_tcp_port AS [Порт] 
 sp.[program_name] AS [Имя программы] 
 sp.loginame 
 FROM sys.dm_exec_connections dc INNER JOIN MASTER.sys.sysprocesses sp ON dc.session_id = sp.spid
Похожие вопросы