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.
ÚvodTí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 IPIP (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 TCPProtokol 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 UDPProtokol 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.
SoketSoket 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 WindowsJá 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 LinuxuV 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):
- Sokety a C++
- Překlad doménových jmen v Linuxu
- Překlad doménových jmen v MS Windows
- TCP klient v Linuxu
- TCP klient v MS Windows
- TCP server v Linuxu
- TCP server v MS Windows
- Protokol UDP 1.část
- Protokol UDP 2.část
- Zpracování chyb soketů v Linuxu
- Zpracování chyb soketů v MS Windows
Poslat článek
Nyní máte možnost poslat odkaz článku svým přátelům:
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007