Programowanie C

Gniazdo POSIX z programowaniem C

Gniazdo POSIX z programowaniem C

Socket POSIX lub po prostu Socket jest zdefiniowany jako punkt końcowy komunikacji. Na przykład, jeśli dwie strony, A i B, zamierzają komunikować się ze sobą, wymagane będzie, aby obie te strony nawiązały połączenie między ich odpowiednimi punktami końcowymi. Gniazdo zapewnia komunikującym się stronom bramę, przez którą przesyłane są wiadomości. Jeśli mówimy w kategoriach klienta i serwera, to zadaniem gniazda po stronie serwera będzie nasłuchiwanie połączeń przychodzących, a gniazdo po stronie klienta będzie odpowiedzialne za połączenie z gniazdem po stronie serwera. Ten artykuł ma na celu uczynienie koncepcji gniazda POSIX z programowaniem w C znacznie jaśniejszym.

Przykład użycia Posix Socket z programowaniem C w Linux Mint 20

Przykład przedstawiony w tej sekcji zademonstruje interakcję między klientem a serwerem. Klient i serwer to dwie główne jednostki modelu klient/serwer w świecie informatyki. W naszym przykładzie zarówno klient, jak i serwer będą wysyłać i odbierać wiadomości do siebie i od siebie, korzystając z gniazda POSIX z programowaniem w C w Linux Mint 20. Aby ułatwić zrozumienie kodu, oddzieliliśmy kod po stronie klienta i kod po stronie serwera i wyjaśnimy je osobno poniżej.

Kod po stronie serwera

W przypadku kodu po stronie serwera po prostu utworzyliśmy pusty dokument w katalogu domowym naszego systemu Linux Mint 20 i nazwaliśmy go serwerem.do. W tym pustym dokumencie musisz napisać fragmenty kodu pokazane na trzech poniższych obrazkach:

Kod pokazany na powyższych obrazkach może wydawać się zbyt długi, jednak spróbujmy go zrozumieć w niezwykle prosty sposób. Przede wszystkim stworzyliśmy gniazdo i dołączyliśmy do niego żądany numer portu, który w naszym przypadku to 8080. Następnie napisaliśmy funkcję nasłuchiwania, która służy do wyszukiwania wszystkich połączeń przychodzących od klientów. Zasadniczo klientowi udaje się połączyć z serwerem tylko ze względu na obecność tej funkcji nasłuchiwania. A po nawiązaniu tego połączenia serwer jest gotowy do wysyłania i odbierania danych do i od klienta.

Funkcje odczytu i wysyłania służą odpowiednio do odbierania i wysyłania wiadomości do klientów. W naszym kodzie zdefiniowaliśmy już domyślną wiadomość, którą zamierzamy wysłać naszemu klientowi, czyli „Witaj z serwera”. Po wysłaniu tej wiadomości do klienta zostanie ona wyświetlona po stronie klienta, natomiast wiadomość o treści „Witaj wysłano wiadomość” wyświetli się po stronie serwera. Chodzi o nasz kod po stronie serwera.

Kod po stronie klienta

Teraz, dla kodu po stronie klienta, ponownie utworzyliśmy pusty dokument w katalogu domowym naszego systemu Linux Mint 20 i nazwaliśmy go klientem.do. W tym pustym dokumencie musisz napisać fragmenty kodu pokazane na dwóch poniższych obrazkach:

W kodzie po stronie klienta pokazanym na powyższych obrazkach stworzyliśmy gniazdo w taki sam sposób, jak w przypadku kodu po stronie serwera. Następnie istnieje funkcja connect, która spróbuje nawiązać połączenie z serwerem przez określony port. A gdy to połączenie zostanie zaakceptowane przez serwer, klient i serwer będą ustawione na wysyłanie i odbieranie wiadomości między sobą i od siebie.

Ponownie, podobnie jak kod po stronie serwera, funkcje wysyłania i odczytu służą odpowiednio do wysyłania i odbierania wiadomości z serwera. Wspomnieliśmy również o domyślnej wiadomości, którą chcemy wysłać na serwer, a mianowicie „Witaj z klienta”. Po wysłaniu tej wiadomości do serwera, wiadomość ta zostanie wyświetlona po stronie serwera, natomiast wiadomość o treści „Witaj wysłano wiadomość” wyświetli się po stronie klienta. I to prowadzi nas do końca wyjaśnienia naszego kodu po stronie klienta.

Kompilowanie i uruchamianie kodów po stronie klienta i serwera

Oczywiście po napisaniu tych programów będziemy zapisywać zarówno pliki po stronie klienta, jak i serwera, a następnie wszyscy będziemy gotowi do skompilowania i uruchomienia tych kodów. Dzięki temu będziemy mogli zwizualizować interakcję między naszym nowo utworzonym klientem a serwerem. Aby osiągnąć ten cel, musimy uruchomić dwa różne terminale, ponieważ mamy uruchamiać dwa oddzielne programy. Jeden terminal będzie dedykowany do uruchamiania kodu po stronie serwera, a drugi do kodu po stronie klienta.

Tak więc, aby skompilować nasz kod po stronie serwera, wykonamy następujące polecenie w pierwszym terminalu:

$ serwer gcc.c -o serwer

Po uruchomieniu tej komendy, jeśli nie będzie błędów w kodzie po stronie serwera, to na terminalu nic się nie wyświetli, co będzie sygnałem o udanej kompilacji.

W ten sam sposób skompilujemy kod po stronie klienta za pomocą polecenia pokazanego poniżej, uruchamiając go w drugim terminalu:

$ klient gcc.c -o klient

Gdy oba kody zostaną skompilowane, uruchomimy je jeden po drugim. Jednak najpierw musimy uruchomić kod po stronie serwera, ponieważ ma on nasłuchiwać żądań połączeń. Kod po stronie serwera można uruchomić za pomocą następującego polecenia:

$ ./serwer

Po uruchomieniu kodu po stronie serwera możemy uruchomić kod po stronie klienta za pomocą polecenia pokazanego poniżej:

$ ./klient

Gdy zarówno klient, jak i serwer zostaną uruchomione i uruchomione, na obu terminalach zobaczysz dane wyjściowe pokazane na poniższych obrazach:

Wniosek

Mamy nadzieję, że po zapoznaniu się z przykładem udostępnionym w tym artykule, będziesz w stanie efektywnie używać gniazd POSIX do wysyłania i odbierania danych między klientem a serwerem. Ten przykład jest tylko podstawową demonstracją gniazd Posix z programowaniem w C, jednak możesz nawet uczynić te programy bardziej złożonymi zgodnie z własnymi wymaganiami.

Gry Zainstaluj najnowszą grę strategiczną OpenRA na Ubuntu Linux
Zainstaluj najnowszą grę strategiczną OpenRA na Ubuntu Linux
OpenRA to darmowy silnik gier strategicznych czasu rzeczywistego, który odtwarza wczesne gry Westwood, takie jak klasyczny Command & Conquer: Red Aler...
Gry Zainstaluj najnowszy emulator Dolphin dla Gamecube i Wii w systemie Linux
Zainstaluj najnowszy emulator Dolphin dla Gamecube i Wii w systemie Linux
Emulator Dolphin pozwala grać w wybrane gry Gamecube i Wii na komputerach osobistych z systemem Linux (PC). Będąc ogólnodostępnym emulatorem gier o o...
Gry Jak korzystać z GameConqueror Cheat Engine w systemie Linux
Jak korzystać z GameConqueror Cheat Engine w systemie Linux
Artykuł zawiera przewodnik dotyczący korzystania z silnika oszukującego GameConqueror w systemie Linux. Wielu użytkowników, którzy grają w gry w syste...