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 wieiplist->Length
, vielleicht auch weniger - je nachdem wieviel IPv6 Adressen vorhanden sind.iplistnew->Length
führt im gezeigten Code zu einerNullReferenceException
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 iniplist
bei Indexiplist->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!!