Funkcje gniazda używają struktur w swoich argumentach wejściowych, które zawierają dane dotyczące klienta i serwera. Najważniejszymi informacjami w tych strukturach są niewątpliwie adresy IP.
Istnieje kilka rodzajów struktur, które są używane przez funkcje gniazda do przechowywania tych adresów. Na przykład: sockaddr, addrinfo lub in_addr itp.
Niezależnie od rodzaju struktury, w której są przechowywane, adresy IP nie są kodowane, co oznacza, że każda z liczb w ich polach jest reprezentowana przez jego równoważny binarny. Oznacza to, że w niektórych przypadkach konieczne jest konwersja adresów IP na struny lub ciągi na adresy IP, aby z nimi współpracować.
W tym Wskazówka Linux Artykuł, dowiesz się, jak przekonwertować ciągi na adresy IP za pomocą inet_pton () funkcjonować.
Przyjrzymy się składni tej funkcji i teoretycznym opisie tego, jak ona działa, argumenty wejściowe i wyjściowe oraz typ danych w każdym z nich.
Następnie stosujemy to, czego nauczyliśmy się w praktycznych przykładach, które zawierają fragmenty kodu i obrazy, które pokazują, jak funkcja inet_pton () w języku C przekształca struny na adresy IP.
Składnia funkcji inet_pton () w języku C
int inet_pton (int af, const char *src, void *dst);Opis funkcji inet_pton () w języku C
inet_pton () Funkcja konwertuje ciąg, do którego można się odwoływać src do adresu sieciowej, która jest określona Af. Rezultatem tego procesu jest adres w bezpośrednim formacie binarnym, zwróconym w strukturze wskazanej przez Dest.
Ta funkcja akceptuje adresy IPv4 i IPv6 i jest bardzo przydatne, gdy chcemy utworzyć aplikacje połączenia w sieciach lokalnych, w których znamy adres IP, do którego chcemy się połączyć.
Inet_pton () jest uzupełniający się do funkcji inet_ntop () i wykonuje odwrotną konwersję.
Następnie szczegółowo przyglądamy się argumentom wejściowym tej funkcji:
AF: Ten wpis określa rodzinę adresu do konwersji.
AF_INET przekształca ciąg na adres rodzinny IPv4.
AF_INET6 przekształca ciąg na adres rodziny IPv6.
SRC: Ciąg lub wskaźnik do niego określa adres w formacie tekstowym.
Dest: Wskaźnik do struktury, gdzie przechowywać adres w bezpośrednim formacie binarnym. Struktury te mogą być typu sockaddr, sockaddr_in, sockaddr_in6 itp.
Jeśli konwersja zakończy się powodzeniem, ta funkcja zwraca 1. Jeśli wystąpi błąd, zwraca 0. Kod błędu można zapytać w errno Zmienna globalna.
inet_pton () Funkcja jest zdefiniowana w „INET.H ”nagłówek i jest jednym z serii„.H ”pliki, które definiują funkcje połączenia i są przechowywane w folderze„ ARPA ”. Aby użyć tej funkcji, musimy ją podać w naszym pliku C w następujący sposób:
#włączaćJak przekonwertować ciąg na adres IP za pomocą funkcji inet_pton () w języku C
W poniższym przykładzie konwertujemy bufor ciągnąć się w adres i przechowuj w strukturze sockaddr_in typ, którego wskaźnik jest addr_in. Aby to zrobić, przypisujemy „192.168.1.1 ” adres do ciągu bufora i zadeklaruj strukturę addr_in i jej wskaźnik.
Następnie z Jeśli warunkowe, nazywamy inet_pton () i przekazaj rodzinę adresów jako argumenty wejściowe Af, który w tym przypadku jest af _inet. Przekazujemy adres, który jest przechowywany w bufor jako drugi argument w formacie ciągów. Wreszcie, przekazujemy adres addr_in wskaźnik konstrukcji, w której przechowujemy adres w formacie binarnym.
Jeśli podczas konwersji wystąpi błąd, program wchodzi Jeśli warunkowe i wyświetla następującą wiadomość: „Błąd konwersji”.
Jeśli inet_pton () nie zwraca błędu, sprawdzamy adres przechowywany w strukturze Addr_in i używamy funkcji komplementarnej inet_ntop (), aby przekonwertować go z powrotem na ciąg i wysyłać do powłoki z printf ().
Poniżej znajduje się kod, który wykonuje konwersję z inet_pton (). Następnie przekształca adres z powrotem do ciągu i drukuje wynik na konsolę poleceń:
#włączaćPoniższy obraz pokazuje kompilację i wykonanie tego kodu:
Poniższy rysunek pokazuje wynik wysyłania ciągu z nieprawidłowym formatem adresu. W takim przypadku INET_PTON () zwraca 0, a przepływ programu wchodzi w warunek IF, w którym wyświetlany jest komunikat o błędzie.
Jak przekonwertować ciąg na adres IPv6 za pomocą funkcji inet_pton () w języku C
Aby przekonwertować ciąg na adres rodzinny IPv6, można użyć kodu z poprzedniego przykładu. Musimy tylko użyć struktur i buforów z rozmiarami kompatybilnymi z tym typem adresu i ustawić rodzinę AF _inet6 na Af wejście.
W takim przypadku rozmiar buforu musi być inet6_adstrstlen, a struktura docelowa musi być typowa sockaddr_in6. Oto zmodyfikowany kod do konwersji ciągów na adresy IPv6:
#włączaćPoniższy obraz pokazuje kompilację i wykonanie tego kodu, który konwertuje ciąg na adres IPv6:
Wniosek
W tym Linux wskazówki Artykuł, wyjaśniliśmy, jak przekonwertować format ciągu na adresy IP w bezpośrednim binarie za pomocą inet_pton () funkcjonować.
Widzieliśmy teoretyczny opis tej funkcji, jej argumenty wejściowe i rodzaj danych, które przetwarza każdy. Następnie zaimplementowaliśmy tę funkcję w praktycznych przykładach, które pokazują, jak przekonwertować struny znaków na adresy IP przechowywane w strukturach typu sockaddr_in, które najczęściej używane są do ustanowienia połączeń.
Mamy nadzieję, że ten artykuł uznałeś. Subskrybuj naszą stronę internetową i użyj naszej wyszukiwarki, aby uzyskać więcej artykułów C i wskazówek Linux.