Konvertieren Sie die IP-Adresse in sockaddr zu uint32_t

Ich bin tyring zu konvertieren IP-Adresse (v4) gespeichert in struct sockaddr zu uint32_t.

//struct sockaddr in_addr;
struct sockaddr_in* addr = (struct sockaddr_in*)&in_addr;

uint32_t clientIpAddr = static_cast<uint32_t>(addr->sin_addr.s_addr);
uint16_t clientPortNumber = addr->sin_port;

Ersten Frage ich mich, ob diese überhaupt funktionieren.

Zweiten, ist es besser, konvertieren Sie die IP-Adresse char[4] und konvertieren, dass zu uint32_t später?

Dritten, wird die IP-Adresse 0.0.0.1 umgewandelt werden, um die Nummer 1? oder etwas anderes, weil der byte-Reihenfolge?

  • Sollten Sie nicht das deklarieren von Variablen als sockaddr zu beginnen. Erklären Sie, wie sockaddr_in (IPv4) sockaddr_in6 (IPv6), oder sockaddr_storage` (IP-gebunden) statt, und dann type-cast Sie sockaddr* bei der Weitergabe an verschiedenen socket-Funktionen (connect(), accept(), etc). In jedem Fall extrahiert eine IPv4-Adresse aus in_addr stellen Sie sicher, dass in_addr.sa_family ist AF_INET, then a type-cast to sockaddr_in` ist in Ordnung (Sie brauchen nicht zu static_cast die s_addr Wert, aber Sie sollten reinterpret_cast auf die in_addr cast, wenn Sie gehen, um die C++ - casts überhaupt).
  • Ich danke Ihnen sehr! 🙂
InformationsquelleAutor LETs | 2015-09-29
Schreibe einen Kommentar