C GetsockName Użycie

C GetsockName Użycie
Programowanie gniazd jest dobrze znane i powszechne w programowaniu C między programistami a użytkownikami. W ramach tego rodzaju programowania zwykle łączymy dwa punkty końcowe. Te punkty końcowe mogą być dwoma serwerami, jednym serwerem, jednym gniazdem itp. Jak sama nazwa wskazuje, funkcja „getsockName” jest wykorzystywana do uzyskania nazwy gniazda pracy w sieci. Może to być nazwa gniazda, ale adres tego konkretnego gniazda byłby wyświetlany za pomocą tej funkcji. Dlatego wypróbowaliśmy prostą metodę ilustrując funkcję getsockName () w c w tym przewodniku. Przyjrzyjmy się jej przykładowi podczas pracy nad programem za pomocą Ubuntu 20.04 System Linux.

Przykład: Funkcja GetsockName

Spójrzmy na przykład funkcji GetsockName w C. Skorzystaj z skrótu klucza „CTRL+Alt+T”, aby szybko otworzyć aplikację wiersza polecenia na ekranie. Może to potrwać tylko 10 sekund, a twój terminal będzie gotowy do użycia. W obszarze instrukcji terminalu musisz wpisać zapytanie „dotknij” wraz z „nazwą pliku”, aby wygenerować zupełnie nowy plik w twoim systemie, i.mi., pusty. Dostępnych jest wiele opcji, aby otworzyć ten nowo wygenerowany plik, i.mi., vim, nano lub edytor tekstu. Użytkownicy mogą najpierw otwierać go w edytorze tekstu, utworzyć kod, aktualizować lub zmodyfikować kod, a następnie wykonać w ramach powłoki. Można to zrobić, po prostu dwukrotnie stukając nazwę pliku przebywającą w folderze „Home” Eksploratora pliku. Jeśli użytkownicy chcą otworzyć pusty plik w edytorze „GNU Nano”, mogą użyć polecenia terminalowego „Nano”. Napisz tę instrukcję i naciśnij Enter, aby ją wykonać. Wymieniono zarówno instrukcje tworzenia i otwierania plików:

Kod C zaczyna się od włączenia niektórych głównych i ważnych plików nagłówka. Słowo kluczowe „w tym” jest używane ze znakiem skrótu, aby to zrobić. Tutaj używanych jest 11 nagłówków. „Stdio.H ”został użyty do uzyskania standardowego wejścia i wyjścia. „Unistd.H". jest wykorzystywany do dostępu do API systemu operacyjnego POSIX, i.mi., Systemy Linux i Unix podobne do. „Stdlib.H ”nagłówek to standardowa biblioteka do celów ogólnych, i.mi., Wpisz konwersje, zarządzanie procesami, alokacje do przechowywania itp. „Errno.h ”jest używany głównie do problemów z błędami i raportowaniem. „String.Moduł H ”dla C służy do obsługi ciągów wraz z niektórymi innymi funkcjami. „SYS/Type.Nagłówek H ”jest wykorzystywany do zdefiniowania typów danych zmiennych i funkcji używanych w naszym kodzie programu.

Plik nagłówka „SYS/STAT.H ”jest tutaj używany do opisania budowy zwróconych danych informacyjnych. Biblioteka nagłówka „Sys/gniazdo.h ”zostanie wykorzystane do korzystania z funkcji i zmiennych gniazd w naszym kodzie. „Sys/un.H ”biblioteka nagłówka jest tutaj, aby zapisać adresy gniazd podobnych do Unix. „Netint/in.H ”jest specjalnie zaprojektowany do zainicjowania zmiennego typu struktury dla adresu IPv6 w pętli.

Zmienne inet addrstlen lub inet6 addrstlen zwykle są zdefiniowane w „ARPA/INET.H ”biblioteka nagłówka. Po wszystkich plikach nagłówka zaimplementowaliśmy funkcję zdefiniowaną przez użytkownika o nazwie „Showerror”, biorąc jeden argument wskaźnika stałego znaku „E”. Ten argument wskaźnika odnosi się do niektórych błędów znalezionych do tej pory w naszym kodzie. W przypadku języka programowania C, metoda błędu POSIX, i.mi., Perror jest używany do wyświetlania komunikatu odpowiedzi na błąd na „stderr” w zależności od warunków błędu Errno. Wyświetla „STR” i komunikat odpowiedzi na błąd zgodny z uniwersalnym, zmiennym errno, zgodnie z kodem programu. Funkcja „Perror” wykorzystuje argument „E” jako komunikat o błędzie, aby. Funkcja „Wyjdź (1)” jest tutaj, aby wyjść lub zakończyć funkcję „showerror ()” w tej chwili:

Oto funkcja „sock_addr” typu wskaźnika, biorąc trzy argumenty w swoich parametrach. Parametr „S” reprezentuje gniazdo, a do przechowywania danych gniazda zostanie użyta zmienna wskaźnika typu znaku „BUF”. Podczas gdy ostatni argument „Bufsize” typu „size_t” zostanie użyty do zdefiniowania rozmiaru zmiennej bufora lub po prostu buforowania. W ramach tej funkcji utworzyliśmy strukturę o nazwie „AddR” do przechowywania adresu gniazda. Długość zmiennej „AddR” została zapisana w zmiennej typu liczb całkowitych „len”, stosując na niej funkcję „rozmiar”.

Funkcja getsockName () została tutaj wykorzystana do uzyskania nazwy gniazda. Ta funkcja wykorzystuje gniazdo, adresy gniazda i długość gniazda jako argumenty wejściowe. Niezależnie od odpowiedzi na funkcję GetsockName, odpowiedź będzie przechowywana w zmiennej „Z”, i.mi., zebrane czy nie. Oświadczenie „jeśli” jest tutaj, aby sprawdzić warunek, że zmienna „Z” otrzymała kod stanu zwrotu jako -1, i.mi., FAŁSZ. Oznacza to, że jeśli nie możesz uzyskać nazwy gniazda, zwróci Null do funkcji wywołania. Funkcja „snprintf” służy do uzyskania adresu gniazda, konwertowania go na formę łańcuchową i wyświetlanie na powładzie. W tym celu rozmiar bufora i bufora musi być używany jako argument. Adres portu gniazda jest wykorzystywany w funkcji „NTOHS” do konwersji go na kod bajtów hosta:

Funkcja Main () bierze 4 argumenty w swoim parametrze. Zmienna adresu typu struktury „Addr” dla gniazda jest zadeklarowana ze zmienną typu znaku „BUF” o rozmiarze 64. Następnie tworzymy gniazdo internetowe IPv4 za pomocą funkcji gniazda. Ten status gniazda zwraca kod i zostanie zapisany do zmiennej „SCK_INET”. Jeśli gniazdo nie utworzy się skutecznie, takie jak SCK_INET nie jest równe zero, wywoła komunikat „showerror”, przekazując go prostym tekstem „socket ()”.

Następnie próbowaliśmy utworzyć adres „AF_INET”. Funkcja memset () służy do zainicjowania adresu dla gniazda do 0. Rodzina adresu gniazda została zainicjowana jako „AF_INET”, jego port jest również zadeklarowany, podczas gdy funkcja htonów jest tutaj, aby przetłumaczyć format bajtu hosta na format bajtu sieciowego. Funkcja INET_ATON wykorzystuje lokalny adres IP do konwersji na standardowy format ciągu i zapisać w zmiennej adresu gniazda. Rozmiar zmiennej adresu jest przechowywany w zmiennej „len”. Funkcja BIND () wiąże adres do gniazda i zapisuje kod powrotu statusu w „Z”. Jeśli kod stanu to „-1”, i.mi., Fałsz, wywoła komunikat „showerror” podczas wywoływania w nim funkcji bind (). Jeśli funkcja „sock_addr ()” nie może zostać wywołana, wywoła również funkcję „showerror”, biorąc „sock_addr” jako argument. Instrukcja PrintF pokazuje nazwę przechowywaną w buforze:

Funkcja zamykająca jest wywoływana w celu zamknięcia gniazda internetowego IPv4:

Po kompilacji i wykonaniu mamy nazwę gniazda, na której podłączony jest nasz system:

Wniosek:

Ten artykuł jest rzeczywiście potrzebą każdego użytkownika C chętnie wyszukiwania przykładu „GetsockName” w Linux. W tym przewodniku omówiliśmy jeden przykład. Próbowaliśmy uprościć dla naszych użytkowników, ponieważ kod został podzielony na fragmenty. Mamy nadzieję, że ten artykuł będzie bardzo pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i samouczków.