Wyślij funkcję 2 C

Wyślij funkcję 2 C
„Aby wysłać wiadomość z jednego gniazda do innego kanału, możemy skorzystać z funkcji systemu send (), sendto () i sendmsg () języka C w systemie Kali Linux. Możemy wywołać funkcję send (), gdy gniazdo jest podłączone (aby znany był do zamierzonego odbiorcy). Istnienie flag jest jedynym odróżnikiem funkcji send () i zapisu (2). Funkcja send () jest równoważna do zapisu (2) z parametrem flag zero. Ponadto następne połączenie jest równoważne WQ1 Send (Socket_file_Descriptor, Bufor, Długość, Flagi);
sendto (Socket_file_Descriptor, bufor, długość, flagi, null, 0);

Deskryptor pliku gniazda wysyłającego jest zawarty w argument Socket_file_Descriptor. Wiadomość znajduje się w buforze i ma długość długości dla send () i sendto (). Potrzebujemy terminali serwera i klienta, aby zrozumieć funkcjonalność funkcji send (). W tym celu musimy napisać kod zarówno dla serwera, jak i klienta. Korzystając z edytora VIM, utwórz serwer.c Plik programowania. To jest polecenie otwarcia pliku kodowania w VIM Editor."

Po włączeniu niezbędnych plików nagłówka w pierwszych pięciu wierszach serwera.plik c, definiujemy zmienną portu i ustawiamy jej wartość na 8000. Po uruchomieniu funkcji głównej deklarujemy trzy zmienne typu liczb całkowitych o nazwie Server FD (deskryptor pliku serwera), nowe gniazdo i odczytanie wiadomości w pierwszym wierszu. Zadeklaruj później zmienną adresową typu sockaddr.

Następnie definiujemy wartość opcji zmiennej, aby wynosić 1. Wykorzystując funkcję size_of, która jest równa adresu, zdefiniuj zmienną długości adresu. Ustaw rozmiar bufora zmiennej tablicy typu na 1024 i zdefiniuj wartości na 0. Komunikat zmiennej typu znaków jest następnie zdefiniowany i biorąc pod uwagę wartość „Cześć, jestem serwerem. Jak mogę ci pomóc?". Rodzaje adresów, z którymi gniazdo może się komunikować, są oznaczone przez Adres Family AF_INET (w tym przypadku adresy protokołu internetowego V4).

W instrukcji warunkowej przypisz deskryptor pliku serwera i sprawdź, czy przypisanie powoduje błąd. Jeśli się nie powiedzie, pokaż komunikat o błędzie „Gniazdo nie powiodło się” i opuść główną funkcję. Korzystając z funkcji setsockopt (), aplikacja może zarządzać zachowaniem gniazda. Ponieważ port 8080 jest niedostępny, przymocujemy gniazdo do portu 8000 w tym wyrażeniu warunkowym. Celowo łączymy gniazdo serwera z portem 8080 w drugiej linii warunkowej. Jeśli proces wiązania nie poszedł zgodnie z planem, użyj metody Perror, aby wyświetlić komunikat o błędzie i funkcję wyjścia, aby opuścić funkcję główną. Sprawdź, czy serwer słucha żądania klienta w trzecim wyrażeniu warunkowym.

Akceptujemy połączenie serwera i ustawiamy nową wartość gniazda w czwartej instrukcji warunkowej, wskazując, że serwer odbiera żądanie klienta. Wiadomość wysłana przez klienta za pomocą gniazda i bufora powinna być teraz odczytana. Wiadomość klienta zostanie następnie wyświetlona na ekranie terminalu i wysłana do klienta wskazana na początku funkcji głównej. Zamknij gniazdo i zamknij kanał za pomocą mechanizmu wyłączania po udanej komunikacji podczas przekazywania deskryptora pliku serwera i zamknij polecenie RDWR.

Zamknij edytor VIM i skompiluj kod za pomocą kompilatora GCC. Zapisz plik wyjściowy lub obiektowy w pliku serwera:

Nadszedł czas, aby sprawdzić, czy kod serwera działa, czy po zakończeniu kompilacji. Użyj./skrypt serwera wewnątrz terminalu i klawisz Enter, aby to zrobić. Kiedy kursor miga, serwer jest aktywny i czeka na żądanie od klienta:

Teraz musimy napisać kod klienta za pomocą edytora VIM i zapisać go w kliencie.plik C.

Kod dla klienta jest wyświetlany na poniższym ekranie. Zawiera pliki nagłówka w pierwszych kilku wierszach i ustawia port używany do komunikacji między serwerem a klientem na 8000. Utwórz trzy zmienne typu liczb całkowitych i ustaw wartość skarpet na 0 wewnątrz głównej funkcji. Następnie zrób zmienną z sockaddr typem. Ustaw zmienną wiadomości o wartości „Pozdrowienia od klienta!”I zapisz to.

Teraz użyj instrukcji warunkowej, aby utworzyć gniazdo i zapisać wartość w zmiennej gniazda. Adresy IPv4 lub IPv6 są następnie konwertowane z tekstu na binarne. Korzystamy z domyślnych 127 serwera.0.0.1 adres IP. Z tego powodu stosujemy funkcję inet_pton. Następnie tworzymy kod, aby użyć funkcji Connect do podłączenia się do gniazda i definiowania deskryptora pliku klienta. Adres serwera został do niego dostarczony. Jesteśmy teraz przygotowani do użycia funkcji wysyłania, aby dostarczyć wiadomość do serwera.

Gniazdo, wiadomość, długość wiadomości i flaga-które są ustawione na 0-są zawarte w metodzie wysyłania. Wyświetl na terminalu klienta, gdy wiadomość została wysłana. Następnie przeczytaj odpowiedź serwera i wyświetl ją na ekranie. Zamknij deskryptor pliku po udanej komunikacji.

Teraz skompiluj kod podany w poniższym fragmencie.

Musisz pamiętać, że musisz uruchomić serwer przed uruchomieniem klienta, ponieważ jeśli serwer nie odpowiada, klient nie będzie się połączyć, a komunikat o błędzie pojawi się na ekranie. W przypadku awarii komunikacji jest to wyjście.

Oto zrzut ekranu udanej komunikacji po stronie serwera:

Po stronie klienta:

Wniosek

W ramach tego artykułu zademonstrowaliśmy użycie funkcji send () C w programie Kali Linux. Pamiętaj, że nie możemy wchodzić w interakcje na tym samym terminalu, więc musimy otworzyć dwa, jeden dla serwera, a drugi dla klienta. Ten przykład można dostosować zgodnie z potrzebami użytkownika.