C Programování

POSIX Socket s programováním C

POSIX Socket s programováním C

POSIX Socket nebo jednoduše Socket je definován jako komunikační koncový bod. Například pokud dvě strany, A a B, mají v úmyslu komunikovat navzájem, pak bude vyžadováno, aby obě tyto strany navázaly spojení mezi svými příslušnými koncovými body. Zásuvka poskytuje komunikujícím stranám bránu, přes kterou zprávy cestují. Pokud mluvíme o klientovi a serveru, pak bude úkolem zásuvky na straně serveru naslouchat příchozím připojením, zatímco zásuvka na straně klienta bude zodpovědná za připojení k zásuvce na straně serveru. Tento článek je zaměřen na mnohem jasnější pojetí soketu POSIX s programováním C.

Příklad použití Posix Socket s programováním C v Linux Mint 20

Příklad uvedený v této části předvede interakci mezi klientem a serverem. Klient a server jsou ve světě výpočetní techniky dvě hlavní entity modelu klient / server. V našem příkladu bude klient i server posílat a přijímat zprávy navzájem a od sebe, přičemž bude využívat POSIX Socket s programováním C v Linux Mint 20. Z důvodu srozumitelnosti v porozumění kódu jsme oddělili kód na straně klienta a kód na straně serveru a níže vám oba vysvětlíme samostatně.

Kód na straně serveru

Pro kód na straně serveru jsme jednoduše vytvořili prázdný dokument v domovském adresáři našeho systému Linux Mint 20 a pojmenovali jej server.C. V tomto prázdném dokumentu musíte napsat fragmenty kódu zobrazené na třech obrázcích níže:

Kód zobrazený na obrázcích výše se může zdát zdlouhavý, ale zkusme to pochopit extrémně snadným způsobem. Nejprve jsme vytvořili soket a připojili jej s požadovaným číslem portu, což je v našem případě 8080. Pak jsme napsali funkci poslechu, která je zde k vyhledání všech příchozích připojení od klientů. V zásadě se klientovi podaří připojit k serveru jen kvůli přítomnosti této funkce poslechu. A jakmile je toto připojení navázáno, je server nastaven na odesílání a přijímání dat do a z klienta.

Funkce čtení a odesílání slouží pro účely přijímání a odesílání zpráv klientům. V našem kódu jsme již definovali výchozí zprávu, kterou hodláme odeslat našemu klientovi, a to „Hello from server“. Po odeslání této zprávy klientovi se zobrazí na straně klienta, zatímco na straně serveru se zobrazí zpráva „Hello message sent“. Jedná se o náš kód na straně serveru.

Kód na straně klienta

Nyní jsme pro kód na straně klienta opět vytvořili prázdný dokument v domovském adresáři našeho systému Linux Mint 20 a pojmenovali jsme jej jako klient.C. V tomto prázdném dokumentu musíte napsat fragmenty kódu zobrazené na dvou obrázcích níže:

V kódu na straně klienta zobrazeného na obrázcích výše jsme vytvořili soket stejným způsobem, jako jsme to udělali pro kód na straně serveru. Pak existuje funkce připojení, která se pokusí navázat spojení se serverem prostřednictvím zadaného portu. A jakmile toto připojení server přijme, budou klient a server nastaveni na odesílání a přijímání zpráv navzájem a od sebe navzájem.

Opět, stejně jako kód na straně serveru, jsou zde funkce odesílání a čtení pro odesílání a přijímání zpráv ze serveru. Také jsme zmínili výchozí zprávu, kterou chceme odeslat na server, a to „Hello from client“. Po odeslání této zprávy na server se tato zpráva zobrazí na straně serveru, zatímco na straně klienta se zobrazí zpráva „Hello message sent“. A tím se dostáváme na konec vysvětlení našeho kódu na straně klienta.

Kompilace a spuštění klientských a serverových kódů

Je zřejmé, že po napsání těchto programů budeme ukládat jak naše klientské, tak i serverové soubory, pak budeme nastaveni na kompilaci a spuštění těchto kódů. Proto budeme schopni vizualizovat interakci mezi naším nově vytvořeným klientem a serverem. K dosažení tohoto cíle musíme spustit dva různé terminály, protože máme spustit dva samostatné programy. Jeden terminál bude vyhrazen pro spuštění kódu na straně serveru a druhý pro kód na straně klienta.

Takže pro kompilaci našeho kódu na straně serveru provedeme v prvním terminálu následující příkaz:

$ gcc server.c -o server

Po spuštění tohoto příkazu, pokud v kódu na straně serveru nebudou žádné chyby, nebude se na terminálu zobrazovat nic, což bude známkou úspěšné kompilace.

Stejným způsobem zkompilujeme kód na straně klienta pomocí níže uvedeného příkazu spuštěním ve druhém terminálu:

$ gcc klient.c -o klient

Jakmile jsou oba kódy zkompilovány, spustíme je jeden po druhém. Nejprve však musíme spustit kód na straně serveru, protože má naslouchat požadavkům na připojení. Kód na straně serveru lze spustit pomocí následujícího příkazu:

$ ./ server

Po spuštění kódu na straně serveru můžeme spustit kód na straně klienta pomocí níže uvedeného příkazu:

$ ./ klient

Jakmile bude klient i server funkční, uvidíte výstupy zobrazené na následujících obrázcích na obou terminálech:

Závěr

Doufejme, že po absolvování příkladu sdíleného s vámi v tomto článku budete moci efektivně používat zásuvky POSIX pro odesílání a příjem dat mezi klientem a serverem. Tento příklad je pouze základní ukázkou zásuvek Posix s programováním v jazyce C, můžete však tyto programy podle svých požadavků dokonce složitější.

Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z nejpopulárnějších her pro obchodní simulaci. V této hře musíte vytvořit skvělé dopravní podnikání. Začnete však na začátku kolem r...
Hry SuperTuxKart pro Linux
SuperTuxKart pro Linux
SuperTuxKart je skvělý titul navržený tak, aby vám ve vašem systému Linux přinesl zážitek Mario Kart zdarma. Je to docela náročné a zábavné hrát, je n...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
The Battle for Wesnoth je jednou z nejpopulárnějších strategických her s otevřeným zdrojovým kódem, které si v tuto chvíli můžete zahrát. Tato hra se ...