Sokety a C++ - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

Sokety a C++

cpp net

4. listopadu 2002, 00.00 | Úvodní článek k seriálu, který se bude zabývat síťovou komunikací v C++. Cílem seriálu je seznámit programátory v jazycích C a C++ s knihovnou soketů a programováním síťových aplikací v C/C++ pomocí soketů. Seriál je určen pro OS Windows a Linux.

Úvod

Tímto článkem zahajujeme nový seriál o síťové komunikaci v C++. Cílem seriálu je seznámit čtenáře s problematikou síťové komunikace v C++. Seriál je zaměřen pro programátory C a C++, kteří chtějí ve svých programech používat sokety a nevědí jak na to. Seriál se bude věnovat používání soketů v operačních systémech MS Windows® a Linux. Znalosti soketů v OS Linux by měly být použitelné na libovolném Unixovém operačním systému. V seriálu se budeme zabývat pouze komunikací TCP/IP nebo UDP/IP bez ohledu na to, že sokety jsou trochu obecnější. V seriálu budou vycházet články věnované programování v MS Windows® nebo Linuxu. Doporučuji všem číst všechny články bez ohledu na to, že Vás třeba některý z operačních systémů (kterému bude věnován článek) nezajímá. Dnes si uvedeme a vysvětlíme některé pojmy, které budeme v seriálu používat.

Protokol IP

IP (Internet Protocol) je komunikační protokol, na kterém je dnes postaven Internet. IP protokol zajišťuje komunikaci dvou počítačů. Komunikace probíhá předáváním tak zvaných IP paketů. IP paket obsahuje hlavičku a data, která přenáší. Tato data přenáší na síťové rozhraní s danou IP adresou. IP adresa je součástí hlavičky IP paketu. IP adresa (ve verzi protokolu 4) má 4 byte. Je běžné používat na Internetu jako adresu nikoliv 4 byte-ové číslo, ale nějaký textový řetězec. Tento řetězec je nutné přeložit na IP adresu pomocí DNS serverů. Právě tomu budou věnovány příští 2 díly.

Protokol TCP

Protokol TCP (Transmision Control Protocol) je dnes asi nejpoužívanější. Jedná se o tak zvanou spojovou službu. Znamená to, že před samotnou komunikací se naváže spojení. Všechna odeslaná data se potvrzují a na konec je nutné spojení ukončit (uzavřít). TCP paket obsahuje svou hlavičku a samotná data, která přenáší. TCP paket bude vložen do IP datagramu (jako data IP datagramu) a odeslán. (Ve skutečnosti IP datagram bude vložen jinam a tak dále až dojdeme k nejnižší vrstvě.) Součástí TCP hlavičky je tak zvaný port. Jedná se o 2 byte-ové číslo. Každá aplikace, která komunikuje pomocí TCP má přidělen svůj v rámci počítače jednoznačný port. Zjednodušeně lze říci, že zatímco IP protokol zajišťuje komunikaci dvou počítačů, tak TCP protokol zajišťuje komunikaci dvou aplikací na těchto počítačích. TCP port lze tedy považovat za jednoznačnou "adresu" aplikace na počítači. Bude-li navazovat TCP spojení, budeme zadávat vždy IP adresu a TCP port. Budeme tedy určovat, s jakým počítačem a s jakou aplikací na něm hodláme komunikovat.

Protokol UDP

Protokol UDP (User Datagram Protocol) je vlastně alternativou k TCP. Jedná se o tak zvanou nespojovanou službu. Nespojovaná služba znamená, že nedochází k navázání spojení. Prostě odešleme data na stanovenou IP adresu a daný UDP port a nevíme, zda data dorazila a zda se nepoškodila. Žádné potvrzení ani nic podobného nepřijde. UDP protokol je vhodný zejména v situacích, kdy by spojení pomocí TCP bylo velkou zátěží pro síť. U TCP paketů se musí posílat potvrzení. U UDP ne. Součástí UDP hlavičky je také port. Jedná se o (v rámci počítače) jednoznačné označení aplikace. Musím jen upozornit, že číslování TCP a UDP portů je na sobě nezávislé. Tedy například aplikace může mít přiřazen TCP port 5000 ale UDP port 5000 může mít přiřazená jiná aplikace.

Soket

Soket je mechanizmus pro komunikaci. Poprvé se objevil v operačním systému BSD. Soket je velice obecný nástroj. Stejné funkce můžeme používat pro komunikaci pomocí různých protokolů. V našem seriálu se budeme zabývat pouze komunikací pomocí protokolů TCP/IP a UDP/IP. Soketové API je shodné pro všechny operační systémy Unixového typu. Tedy na všech systémech by měly být k dispozici stejné funkce se stejnými parametry. Při "přesunu" soketů na operační systém MS Windows® došlo přece jen k mírným změnám. Některá funkce mají trochu jiné typy parametrů, mají méně (případně jiné) možností. Taky je zde několik specielních funkcí, které v "tradičním" soketovém API nejsou k dispozici.

Překladač ve Windows

Já budu pro kontrolu svých příkladů používat volně dostupný překladač (nebo spíše prostředí) Dev-C++. Já mám verzi 4.9.5.0. Na stránkách je k dispozici novější verze. Mě se jí nechce stahovat, navíc je myslím BETA. Můžete případně používat tuto novější verzi. Myslím, že by s tím neměl být problém. Toto prostředí používá překladač MinGW verze 2.95.3-6. Zdrojové texty by ale měly být použitelné snad na každém překladači dostupném pro platformu MS Windows®. Kdyby někdy nastaly problémy, přivítal bych upozornění v diskuzi pod článkem. Budu mít snahu, aby příklady byly spustitelné na jakémkoliv 32-bitovém Windows. Tedy na Windows 95® a vyšších.

Překladač v Linuxu

V Linuxu budu své příklady kompilovat na překladači GNU C/C++ 2.96. Používat budu Linux s jádrem 2.4.2.-2 distribuci RedHat. Případně také jádro 2.4.18 distribuce Debian.

Příště

Dnešní článek byl úvodní a velmi obecný. Příště se budeme podrobněji zabývat překladem doménových jmen v OS Linux. V dalším článku, který bude následovat po něm, se budeme věnovat stejnému tématu, tedy překladu doménových jmen, v OS Windows®. Bude se jednat o poměrně jednoduché téma, s kterým je ale nutné se seznámit.


Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » C/C++  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: