Gniazdo łączy programowanie w C jest zdefiniowane jako dwa węzły w sieci, które mogą łączyć się i wchodzić w interakcje. Drugie gniazdo (węzeł) dociera do pierwszego gniazda, aby nawiązać połączenie, podczas gdy pierwsze gniazdo słucha na określonym porcie na IP. Połączenie gniazda służy jako kanał komunikacyjny między dwiema stronami do wysyłania wiadomości. Napiszemy ten przewodnik, aby znacznie poprawić twoje zrozumienie połączenia gniazda za pomocą paradygmatu programowania C. W tym przewodniku wyślemy wiadomości między serwerem a klientem za pomocą koncepcji programowania C.
Przykład:
Przykłady przedstawione w tym przewodniku są przeprowadzane na Ubuntu 20.04. Tak więc, aby zrobić te przykłady z Ubuntu 20.04, kompilator GCC musi zostać zainstalowany. Po zainstalowaniu GCC niektóre kody C są zapisywane, aby zademonstrować użycie „Socket Connect”. W tym przykładzie utworzymy dwa różne pliki kodu, jeden to kod po stronie klienta, a drugi to kod po stronie serwera. Połączymy oba pliki i wysyłamy między nimi wiadomości.
Kod po stronie serwera
Korzystamy z edytora tekstu, który jest wyposażony w Ubuntu 20.04. Najpierw dodajemy różne pliki nagłówka, jak pokazano na zrzucie ekranu. Te pliki nagłówka są niezbędne dla tego kodu podłączenia gniazda. Po tych plikach nagłówka definiujemy port „8080”. Następnie używamy funkcji „Main ()” i mamy różne zmienne lokalne wewnątrz tej funkcji „Main ()”. Ceate „Bufor []” wielkości „1024” poniżej tych zmiennych. Bufor jest używany tutaj do wysyłania i odbierania danych.
Następnie tworzymy gniazdo w instrukcji „If”. W tym gnieździe podajemy adres IP jako „AF_INET”. Typ połączenia to „sock_stream”, który jest tutaj przekazywany jako drugi parametr i przekazuje „0” jako trzeci parametr. Jeśli dany warunek jest spełniony, instrukcja poniżej tego „jeśli” jest wykonywana w miejscu, w którym umieściliśmy instrukcję „Perror”, która drukuje błąd na terminalu. Następnie dołączamy to gniazdo do portu „8080”.
Używamy „setSocketopt”. Ułatwia to zmianę parametrów dla gniazda, do którego odnosi się sockfd deskryptora pliku. Chociaż w pełni opcjonalne, promuje to adres i ponowne wykorzystanie portów. Unika się błędów takich jak „adres już używany”. Następnie określamy adres gniazda. Jest zdefiniowany w pliku nagłówka. Dla „adresu.sin_port ”, używamy„ htonów ”, który służy do konwersji numeru portu na kolejność bajtu hosta.
Następnie mamy funkcję „bind ()” w instrukcji „jeśli”. Ta funkcja „bind ()” służy do powiązania gniazda z adresem. Zawiera trzy parametry. Następnie tworzymy zmienną „Valread” i umieszczamy fucntion „Read ()”. Zamiast początkowego deskryptora pliku dostarczonego przez gniazdo, wywołanie odczytu wykorzystuje nowy deskryptor pliku podany przez funkcję „Acquire ()”. Mamy instrukcję „printf”, która służy do wyświetlania danych. Następnie używamy funkcji „send ()”. Ta funkcja służy do wysyłania danych na gniazdach.
Następnie ponownie mamy instrukcję „printf” i funkcję „close ()”. Służy to do zamknięcia gniazda i zwolnienia wszystkich zasobów przydzielonych do gniazda. Funkcja „zamknij ()” jest również tutaj, aby wyłączyć połączenie gniazda. Ostatecznie mamy instrukcję „return 0”.
Kod po stronie klienta
Ten kod jest podobny do poprzedniego kodu serwera. Wkładamy różne pliki nagłówków, które są niezbędne dla tego kodu. Następnie deklarujemy funkcję „główną”. W ramach tej funkcji „main ()” mamy różne zmienne lokalne. Po tych zmiennych ustanawiamy „bufor []” wielkości „1024”. Transmisja danych i odbiór w tym przypadku wykorzystują bufor. Tworzymy gniazdo w instrukcji „If”. Adres IP tego gniazda to „af inet”. Typ połączenia dla tego gniazda to „Skarpeta”, który jest dostarczany jako drugi parametr i „0” jako trzeci parametr.
Następnie określamy adresy po utworzeniu gniazda. Następnie używamy tego adresu w instrukcji „If” i mamy tutaj instrukcję „PrintF”. Pierwszym argumentem, jaki mamy, jest „deskryptor pliku gniazda”, drugi argument to adres hosta, a trzecim argumentem jest rozmiar adresu. Następnie używana jest funkcja „send ()”. Dane wysyłane przez gniazda są wysyłane za pomocą tej funkcji. Polecenie „printf” i funkcja „close ()” są następnie ponownie obecne. Odbywa się to w celu zamknięcia gniazda i wydania wszystkich przypisanych do niego zasobów.
Wyjście:
Jak oczekujemy, że uruchomi dwa niezależne kody, musimy uruchomić dwa oddzielne terminale, aby osiągnąć ten cel. Kod po stronie klienta jest wykonywany na jednym terminale, podczas gdy kod po stronie serwera działa na drugim terminalu. W pierwszym terminalu wprowadzamy następujące polecenie, aby skompilować nasz kod po stronie serwera:
Uruchamiając następujące polecenie w drugim terminalu, kompilujemy kod po stronie klienta w ten sam sposób:
Wykonujemy oba kody pojedynczo, gdy są one kompilowane. Ponieważ jednak kod po stronie serwera ma na celu monitorowanie żądań połączenia, musimy go najpierw wykonać. Do wykonania kodu po stronie serwera można użyć następującego polecenia:
Następnie do wykonania kodu po stronie klienta można użyć następującego polecenia:
Po użyciu obu poleceń na obu terminach jednocześnie otrzymujemy to wyjście, które pokazano następująco:
Wniosek
Przedstawiliśmy ten przewodnik, aby pomóc Ci zrozumieć „Socket Connect” w programowaniu C. Wyjaśniliśmy to szczegółowo i podaliśmy przykłady jako wyjście. Będziesz mógł skutecznie wysyłać i odbierać dane między klientem a serwerem za pomocą gniazd po przejściu przez przykład podany w tym przewodniku. Ten przykład służy jedynie prostej ilustracji, jak połączyć gniazda z programowaniem C i sposób wysyłania danych.