Получить DHCP IP-адрес Raspbery Pi - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть приложение .NetCore c #. Я использую его в устройстве Raspberry Pi с Raspbian.

Я пытаюсь получить назначенный мне IP-адрес DHCP.

Я пробовал много вещей.

Все они возвращают 127.0.0.1.

Это использование веб-сокетов. Сервер написан на C #, а клиент написан на JS.

Есть какие-нибудь идеи, кроме обычных примеров?

Последние попытки:

  public void GetIPAddress()
  {
     List<string> IpAddress = new List<string>();
        var Hosts = System.Windows.Networking.Connectivity.NetworkInformation.GetHostNames().ToList();
        foreach (var Host in Hosts)
        {
            string IP = Host.DisplayName;
            IpAddress.Add(IP);
        }
        IPAddress address = IPAddress.Parse(IpAddress.Last());
        Console.WriteLine(address);
    }

Сообщает мне, что "имя типа или пространства имен 'Networking' не существует в пространстве имен 'System.Windows' (отсутствует ссылка на сборку?)"

    public static string GetLocalIPAddress()
    {
        var localIP = "";
        try
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    localIP = ip.ToString();
                    Console.WriteLine(localIP);
                    //break;
                }
            }
        }
        catch ( Exception e )
        {
            Console.WriteLine( e );
            Environment.Exit( 0 );
        }
        return localIP;
    }

Возвращает 127.0.0.1

также следует указать, что использование 127.0.0.1 в качестве соединения через веб-сокет по какой-то причине не работает

1 Ответ

0 голосов
/ 08 ноября 2018

Вместо того, чтобы полагаться на библиотеки / каркас .Net Core, я вместо этого гуглил команды linux, чтобы получить IP-адрес, поскольку я знаю, что он делает это. Если я открою окно терминала на Пи и наберу:

hostname -I

он вернет IP-адрес.

Итак, мой следующий шаг - запустить команду linux из C #.

Для этого я могу использовать класс процесса и перенаправить вывод:

//instantiate a new process with c# app
var proc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "hostname",  //my linux command i want to execute
            Arguments = "-I",  //the argument to return ip address
            UseShellExecute = false,
            RedirectStandardOutput = true,  //redirect output to my code here
            CreateNoWindow = true  /do not show a window
        }
    };

    proc.Start();  //start the process
    while (!proc.StandardOutput.EndOfStream)  //wait until entire stream from output read in
    {
        Console.WriteLine( proc.StandardOutput.ReadLine());  //this contains the ip output                    
    }
...