Как я получаю IP-адрес Локальной сети компьютера программно?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
26
задан Mark Rotteveel 6 May 2019 в 17:17
поделиться

4 ответа

Ссылка Это говорит там, добавьте System.net и использование следующего

    //To get the local IP address 
string sHostName = Dns.GetHostName (); 
IPHostEntry ipE = Dns.GetHostByName (sHostName); 
IPAddress [] IpA = ipE.AddressList; 
for (int i = 0; i < IpA.Length; i++) 
{ 
    Console.WriteLine ("IP Address {0}: {1} ", i, IpA[i].ToString ()); 
}
24
ответ дан PostMan 28 November 2019 в 06:07
поделиться

При поиске вида информации, которую утилита командной строки, ipconfig, может предоставить, необходимо, вероятно, использовать Систему. Сеть. Пространство имен NetworkInformation.

Этот пример кода перечислит все сетевые интерфейсы и выведет адреса, известные каждым адаптером.

using System;
using System.Net;
using System.Net.NetworkInformation;

class Program
{
    static void Main(string[] args)
    {
        foreach ( NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces() )
        {
            Console.WriteLine("Network Interface: {0}", netif.Name);
            IPInterfaceProperties properties = netif.GetIPProperties();
            foreach ( IPAddress dns in properties.DnsAddresses )
                Console.WriteLine("\tDNS: {0}", dns);
            foreach ( IPAddressInformation anycast in properties.AnycastAddresses )
                Console.WriteLine("\tAnyCast: {0}", anycast.Address);
            foreach ( IPAddressInformation multicast in properties.MulticastAddresses )
                Console.WriteLine("\tMultiCast: {0}", multicast.Address);
            foreach ( IPAddressInformation unicast in properties.UnicastAddresses )
                Console.WriteLine("\tUniCast: {0}", unicast.Address);
        }
    }
}

Вы, вероятно, больше всего интересуетесь UnicastAddresses.

36
ответ дан GBegen 28 November 2019 в 06:07
поделиться

Используя Dns требует, чтобы Ваш компьютер был зарегистрирован в локальном сервере DNS, который не обязательно верен, если Вы находитесь на интранет, и еще менее вероятно если Вы дома с ISP. Это также требует, чтобы сетевое распространение в прямом и обратном направлениях - все узнало информацию о Вашем собственном компьютере.

надлежащий путь:

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach(NetworkInterface  adapter in  nics)
{
    foreach(var x in adapter.GetIPProperties().UnicastAddresses)
    {
        if (x.Address.AddressFamily == AddressFamily.InterNetwork  && x.IsDnsEligible)
        {
                    Console.WriteLine(" IPAddress ........ : {0:x}", x.Address.ToString());
        }
    }
}

(ОБНОВЛЯЮТ 31 июля 2015: Решенный некоторые проблемы с кодом)

Или для тех, кому нравится просто строка Linq:

NetworkInterface.GetAllNetworkInterfaces()
    .SelectMany(adapter=> adapter.GetIPProperties().UnicastAddresses)
    .Where(adr=>adr.Address.AddressFamily == AddressFamily.InterNetwork  && adr.IsDnsEligible)
    .Select (adr => adr.Address.ToString());
25
ответ дан James Curran 28 November 2019 в 06:07
поделиться

Поскольку машина может иметь несколько IP-адресов, корректный способ выяснить Ваш IP-адрес, который Вы собираетесь быть использованием для маршрутизации к общему Интернету, должен открыть сокет для хоста в Интернете, затем осмотреть сокетное соединение для наблюдения, каков локальный адрес, который используется в том соединении.

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

11
ответ дан Jerub 28 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: