TCP szerver. TCP szerver alkalmazás írásának az elsajátítása TCP protokoll tulajdonságainak a tanulmányozása kisérleti úton



Hasonló dokumentumok
Számítógép-hálózatok: 4. Labor. TCP kliens. A gyakorlat célja:

UDP idő szerver. UDP protokollal kapcsolatos ismeretek elmélyítése. Egy UPP protokollt használó időszerver megvalósítása

SOCKET használata UDP kliens

Bevezetés a SOCKET programozásba UDP kliens

Számítógépes Hálózatok. 5. gyakorlat

Számítógépes hálózatok I.

Hálózati architektúrák laborgyakorlat

Számítógépes hálózatok

Dr. Varga Imre. Socket-programozás. C nyelven

Socket programozás Példák

Számítógépes Hálózatok. 9. gyakorlat

Számítógépes Hálózatok GY 6.hét

Dr. Varga Imre Debreceni Egyetem, Informatikai Kar. Socket-programozás. C nyelven, Linux alatt

Számítógépes Hálózatok. 7. gyakorlat

Számítógépes Hálózatok GY 3-4.hét

TCP szerver készítése

Számítógépes Hálózatok GY 7.hét

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

URL-LEL ADOTT OBJEKTUM LETÖLTÉSE (1) URL-LEL ADOTT OBJEKTUM LETÖLTÉSE

FTP: Elkülönített kontroll- és adatkapcsolat. FTP: File Transfer Protocol

Számítógépes hálózatok

Számítógépes Hálózatok. 4. gyakorlat

Számítógépes Hálózatok GY 4.hét

Számítógépes Hálózatok. 3. gyakorlat

Kommunikáció. 3. előadás

Számítógépes Hálózatok. 3. gyakorlat

Socketek programozása

Számítógép labor V. Egyszer Web szerver. Dokumentáció. Készítette: Ács Gergely (K4C03M)

Számítógépes Hálózatok 2012

Konkurens TCP Szerver

2. fejezet Hálózati szoftver

Beej útmutatója a hálózati programozáshoz

Gyorstalpaló hálózatprogramozás C nyelven UNIX. környezetben

InFo-Tech emelt díjas SMS szolgáltatás. kommunikációs protokollja. Ver.: 2.1

2. fejezet Hálózati szoftver

Számítógépes Hálózatok GY 8.hét

SSL elemei. Az SSL illeszkedése az internet protokoll-architektúrájába

Számítógépes Hálózatok ősz 2006

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

Adatátviteli rendszerek Mobil IP. Dr. habil Wührl Tibor Óbudai Egyetem, KVK Híradástechnika Intézet

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Fábián Zoltán Hálózatok elmélet

Számítógép-hálózatok. Gyakorló feladatok a 2. ZH témakörének egyes részeihez

III. Felzárkóztató mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Hálózati Architektúrák és Protokollok GI BSc. 10. laborgyakorlat

[SZÁMÍTÓGÉP-HÁLÓZATOK]

Fábián Zoltán Hálózatok elmélet

Számítógépes hálózatok

Modbus kommunikáció légkondícionálókhoz

RPC Remote Procedure Call Távoli eljárás hívás

Tűzfalak működése és összehasonlításuk

Kommunikáció - Wi-Fi, Mobil internet - Bluetooth - GSM / GPRS és SMS - NFC

Bevezető. PoC kit felépítése. NX appliance. SPAN-Proxy

Elosztott rendszerek

Transzport Réteg. Transzport réteg protokollok

4. Hivatkozási modellek

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

BEÁGYAZOTT RENDSZEREK TERVEZÉSE UDP csomag küldése és fogadása beágyazott rendszerrel példa

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

Dokumentáció. 1. Beadandó feladat

UNIX: folyamatok kommunikációja

Általános fiók beállítási útmutató

Tájékoztató. Használható segédeszköz: -

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Körkörös listák. fej. utolsó. utolsó. fej

Hálózati architektúrák laborgyakorlat

SSH haladóknak. SSH haladóknak

SMS KÜLDŐ RENDSZER MŰSZAKI ÉS KEZELÉSI LEÍRÁSA

1. Bevezető. 2. IP cím és szolgáltatások felderítése

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

* Rendelje a PPP protokollt az TCP/IP rétegmodell megfelelő rétegéhez. Kapcsolati réteg

INFORMATIKA javítókulcs 2016

Adatbiztonság PPZH május 20.

Alkalmazás rétegbeli protokollok:

Számítógépes Hálózatok. 5. gyakorlat

Intelligens biztonsági megoldások. Távfelügyelet

Bejövő hívások kezelése a Taxawin Callback moduljával.

G Data MasterAdmin 9 0 _ 09 _ _ # r_ e p a P ch e T 1

ConnectAlarm alkalmazás Központ/modul programozási segédlet V1.2 TL280 (R) v.4.x modulokhoz

Szállítási réteg (L4)

Az RSVP szolgáltatást az R1 és R3 routereken fogjuk engedélyezni.

Teleoperáció Robot vezérlése IP-hálózaton

TCP/IP SOCKET INTERFACE

Programozás I gyakorlat. 5. Struktúrák

Hálózati architektúrák és Protokollok PTI 6. Kocsis Gergely

Vegyes témakörök. 10. Robotvezérlés WiFi kapcsolaton keresztül. Hobbielektronika csoport 2018/ Debreceni Megtestesülés Plébánia

Vezérlési szerkezetek

Fábián Zoltán Hálózatok elmélet

DUALCOM SIA IP TELEPÍTÉSI ÉS ALKALMAZÁSI ÚTMUTATÓ. V és újabb modulverziókhoz. Dokumentum verzió:

Modla Ferenc augusztus Port szkennelés

WDS 4510 adatátviteli adó-vevő

Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

PROGRAMOZÓI MÓD SZERVIZ MÓD ÁLTALÁNOS BEÁLLÍTÁSOK

Mérési jegyzőkönyv. az ötödik méréshez

TRBOnet Térinformatikai terminál és diszpécseri konzol

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

I. Házi Feladat. internet. Határidő: V. 30.

Átírás:

TCP szerver A gyakorlat célja: TCP szerver alkalmazás írásának az elsajátítása TCP protokoll tulajdonságainak a tanulmányozása kisérleti úton Elméleti bevezető: TCP kilens-szerver alkalmazás:

Amint a fenti ábrából is kiderül a TCP klienshez képest megváltozik az alkalmazás, kapcsolódást kezelő része. Itt is, mint az UDP szerver esetében hozzárendelünk egy hosszúéletű portot a sockethez a bind rendszerhívás segítségével TCP kapcsolat felépítése: A kapcsolat normális felépítése, 3-utas kézfogással történik. Az egyidejűleg kezdeményezet kapcsolat felépítésnek is csak egyetlen kapcsolat az eredménye amelynek az azonosítója xy. Gyakorlatban ritkán törtánik meg az egyidejű kapcsolat felépítés mert előre kiosztjáka szerepeket. Ez úgy történik, hogy az egyik kommunikációs fél előlépik szerverré és várja akapcsolodás kéréseket, a másik peddig kliens lesz és kapcsolódik a szerverhez. A socket létrehozásakor alapértelemszerűen aktív szokentként jön létre (kliens) és várja a következő lépést a kapcsolódást. Ha szervert szeretnénk létrehozni, akkor az aktív szocketet át kell alakítani passzív socketté, amelyik a bejövő kéréseket fogadja. A listen függvény alakítja át az aktív szocketett passzívá. Ahoz, hogy egy socket kapcsolódásokat tudjon fogadni szükséges erőforrásokat lefoglajon, két sort, amelyben tárolja a folyamatban lévő kapcsolódás adatait. A listen létrehozza ezt két sort. Az egyik a befejezetlen kapcsolódás sora ebben tárolja a bérkezett kapcsolódás kéréseket amig meg nem érkezik a kapcsolódás elfogadására a nyugta. Majd innen átkerül a befejezett kapcsolatok sorába addig amíg a szerver ki nem veszi hogy felhasználja. int listen( in SOCKET s, in int backlog ); s [in]

backlog [in] Egy socket azonósító egy kapcsolat nélküli socketet azonósít. A maximum hossza a várakozó kapcsolatok sorának. Ha SOMAXCON van beeállítva, az s socketért felelős szolgáltató backlog-ot a mximális elfogadható értékre állítja. Abban az esetben ha a listen sikeres volt 0-t térít vissza máskép SOCKET_ERROR t, amelyet le lehet kérdezni. A második sorból a kész kapcsolatokat az accept metodussal lehet kivenni. Az accept metodus egy várásos metodus, amely csak akkor tér vissza a hivásból, ha SOCKET_ERROR van vagy egy kapcsolódás sikeresen befejeződött. SOCKET accept( in SOCKET s, out struct sockaddr *addr, inout int *addrlen ); s [in] addr [out] Egy passzív socketnek az azonósítója (elötte meg volt híva a listen). Egy opcionális mutató egy pufferre amellyet feltölthet kapcsolat entitás címével. Az addr paramétert meghatározza a címcsalád amely a socket létrehozásakor használva volt. addrlen [in, out] Az opcionális paraméter által használt puffer mérete bemenetként kijevetként az oda feltöltött adat mennyisége. Fontos megjegyezni, hogy a kapcsolat nem a várakozó (szerver) socket és a kapcoslódni kivánó socket között jön létre hanem minde kapcsolat kiépítésekor a szerver socket egy új csatlakozot (socketet) hoz létre az új kapcsolatnak, amelyet visszatérítési érttékként vissza térít. Ha hiva történik akkor a visszatérítés értéke egy INVALID_SOCKET. Feladat: 1. Valósítsatok meg egy visszhang szervert. Az elöző laboron megírt gyakorlatott a következő képpen kell modósítani. a connect helyett bind,listen, accept függvényeket kell használni.

Az alkalmazás szerkezetét lásd 3.ábrán. 2. A kliens fokozatosan nagyobb és nagyobb csomagokat kell küldjön a szervernek. A szerver kell figyelje hogy a csomag egy vagy több csomagban érkezik meg. Amiután megérkezett a teljes üzenet egy nyugtát küld és új adatot vár. Protokoll: az üzenet formátuma: Hossz Adat hossz: int tipusú érték (4 bájt) és az üzenet hosszát tartalmazza adat: bármilyen adat A nyugata hasonló: Hossz=0 Adat (nincsen) Megvalósítás: A csomagok létrehozását legegyszerübben memcpy-val lehet megvalósítani. Kliens: Adatcsomag összeállítása: puffer elejére bemásoljuk, az int típusúcsomag méretet majd eltoljuk a mutatot négy bájtal és bemásoljuk az adatot. Szerver: egy négybájtos puffert lenullázunk és kész is van a nyugta. Szerver: Fogadok annyi bájtott amennyi érkezik. A fogadott adat, első négy bájtján tipuskonverziót hajtok végre és int tipusúvá alakítom. Ellenörzöm, hogy megérkezett-e az egész adat ha igen küldök egy nyugtát ha nem akkor vaárom addig az adatot amig az összes megérkezik. Számolom közben hány csomagot kapok. Ezt az információt kiíratom a képernyőre. Kliens: Létrehozom a csomagot és ciklusban addig küldöm amíg az összes adat el nem megy. A küldés után várom a szervertől a nyugtát. Majd ismételem, az egészet elölről csak növelem a csomag méretét. 3. Egymás után a kliens kis ötbájtos csomagokat küld a szervernek. Az elküldött csomagok között az időt folyamatosan csökkentem. A Szerver minden egyes kapott csomag hosszát kiíratja a képernyőre. Fontos mind a három feladatnál, hogy a szerver fogadó puffere nagyméretű legyen! Példaprogram: #include <stdio.h> #include "winsock2.h"

void main() { // Initialize Winsock. WSADATA wsadata; int iresult = WSAStartup(MAKEWORD(2,2), &wsadata); if (iresult!= NO_ERROR) { printf("error at WSAStartup()\n"); // Create a SOCKET for listening for // incoming connection requests. SOCKET ListenSocket; ListenSocket = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if (ListenSocket == INVALID_SOCKET) { printf("error at socket(): %ld\n", WSAGetLastError()); // The sockaddr_in structure specifies the address family, // IP address, and port for the socket that is being bound. sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("127.0.0.1"); service.sin_port = htons(27015); if (bind( ListenSocket, (SOCKADDR*) &service, sizeof(service)) == SOCKET_ERROR) { printf("bind() failed.\n"); closesocket(listensocket); // Listen for incoming connection requests. // on the created socket if (listen( ListenSocket, 1 ) == SOCKET_ERROR) { printf("error listening on socket.\n"); closesocket(listensocket); // Create a SOCKET for accepting incoming requests. SOCKET AcceptSocket; printf("waiting for client to connect...\n"); // Accept the connection. AcceptSocket = accept( ListenSocket, NULL, NULL ); if (AcceptSocket == INVALID_SOCKET) {

printf("accept failed: %d\n", WSAGetLastError()); closesocket(listensocket); else printf("client connected.\n"); ------------------------- // Call the recvfrom function to receive datagrams // on the bound socket. printf("receiving datagrams...\n"); recvfrom(acceptsocket, RecvBuf, BufLen, 0); // ido lekerese es elkuldese ----------------------- // Send a datagram printf("sending a datagram...\n"); send(acceptsocket, SendBuf, BufLen, 0 ); ----------------------- // When the application is finished sending, close the socket. printf("finished sending. Closing socket.\n"); closesocket(sendsocket); ----------------------- // Clean up and quit. printf("exiting.\n"); return; Kérdések: 1. A viszhang szerverhez egyidejűleg hánykliens probálhat meg csatlakozni? 2. Hány üzenetet tud a viszhangszerver visszaküldeni egyidejűleg? 3. Megtartja-e a TCP protokoll az üzenethatárokat? Könyvészet: [1]. A. Tanenbaum : Számítógéphálózatok. Bp., Panem Könyvkiad ó, 1999. [2]. http://msdn.microsoft.com/en-us/library/ms741416(vs.85).aspx