Artnet Socket Adapter nur IPv4 Adressen



  • Hi,

    ich habe folgendes Problem, wo ich einfach nich weiterkomme. Ich muss sagen das ich extrem wenig Ahnung von C++ habe. Ich habe ein Projekt an der UNI wo ich eine Lernsoftware für die Lichtechnik überholen soll. Es funktioniert auch alles bis auf die Verbindung über ARTNET zum Lichtpult. Dort wird im Code über

    iphost = Dns::GetHostEntry(Dns::GetHostName());
    iplist = iphost->AddressList;
    

    alle IP Adressen geholt. Die iplist wird einer Selectbox zugewiesen, in der mann dan die IpAdresse der ArtNet Verbindung auswählt und mit der wird ein Socket geöffnet. Problem und Exceptions kommen wenn in der Liste die IPv6 Adressen drin stehen. Also möchte ich nur die IPv4 Adressen haben. Und da komme ich nicht weiter, überall gesucht ausprobiert aber nix....

    array<IPAddress^> ^iplist;
    array<IPAddress^> ^iplistnew;
    
    int k = 0;
    for (int i = 0; i <= iplistnew->Length; i++)
    {
     if (iplistnew[i]->AddressFamily == AddressFamily::InterNetwork)
     {
        iplistnew[k] = iplistnew[i];
        k++;
     }
    }
    

    Das ist für mich eigenlich die richtige Lösung, aber es klappt nicht wegen der Array Zuweisung -> NullException....
    Muss doch irgendwie möglich sein das Array neu zuordnen oder Werte einzeln löschen, so das ich ein neues bereinigtes IPv4 Array habe.

    Ich Danke für jede Hilfe....



  • iplistnew ist noch ein nullptr - also kein Array.
    Dazu müsstest du erst eines erzeugen - aber du weisst ja nicht wie gross, maximal so gross wie iplist->Length , vielleicht auch weniger - je nachdem wieviel IPv6 Adressen vorhanden sind.

    ➡ iplistnew->Length führt im gezeigten Code zu einer NullReferenceException

    Ich schlage vor eine List<..> für das Resultat (=gefilterte IP Adressen) zu verwenden. Zudem musst du über die vorhandenen IP Adressen in iplist iterieren. Ausserdem ist der letzte Eintrag in iplist bei Index iplist->Length - 1 .

    IPHostEntry^ iphost = Dns::GetHostEntry(Dns::GetHostName());
    array<IPAddress^>^ iplist = iphost->AddressList;
    List<IPAddress^>^ iplistnew = gcnew List<IPAddress^>();
    for (int i = 0; i < iplist->Length; i++) 
    { 
      if (iplist[i]->AddressFamily == AddressFamily::InterNetwork) 
      { 
         iplistnew->Add(iplist[i]);
      } 
    }
    


  • Super Danke, das hat geholfen!!


Anmelden zum Antworten