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

Hasonló dokumentumok
Dr. Varga Imre. Socket-programozás. C nyelven

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

Hálózati architektúrák laborgyakorlat

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

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

TCP/IP SOCKET INTERFACE

TCP szerver készítése

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

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

Socket programozás Példák

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

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

SOCKET használata UDP kliens

Bevezetés a SOCKET programozásba UDP kliens

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

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

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

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

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

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

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

Socketek programozása

TCP/IP szállítási réteg ( socket programozási interfész )

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

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

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

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

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 GY 4.hét

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

IPv6 általános jellemzés

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

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

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

OpenBSD hálózat és NAT64. Répás Sándor

Modla Ferenc augusztus Port szkennelés

A C programozási nyelv I. Bevezetés

UNIX: folyamatok kommunikációja

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

A C programozási nyelv I. Bevezetés

DNS és IPv6. Jákó András BME TIO

Operációs rendszerek. 6. gyakorlat: Processzusok közti kommunikáció (osztott memória, üzenetsor)

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Kiskapu Kft. Minden jog fenntartva

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

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

Kommunikáció Androidon Mobilinternet Wifi

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

OpenBSD hálózat és NAT64. Répás Sándor

Hálózati architektúrák laborgyakorlat

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

TCP ÉS UDP. Médiakommunikációs hálózatok (VIHIM161) Médiatechnológiák és -kommunikáció szakirány. Dr. Lencse Gábor

Windows rendszeradminisztráció és Microsoft szerveralkalmazások támogatása. Kocsis Gergely, Supák Zoltán

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

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

6. A szállítási réteg

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

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

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

Hálózati architektúrák és Protokollok GI Kocsis Gergely

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

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

Hálózati beállítások Készítette: Jámbor Zoltán 2016

Java II. I A Java programozási nyelv alapelemei

Windows rendszeradminisztráció és Microsoft szerveralkalmazások támogatása. 3. óra. Kocsis Gergely, Supák Zoltán

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Programozás I gyakorlat

Hálózati architektúrák és Protokollok MI 7,8. Kocsis Gergely

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

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

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

A DNS64 és NAT64 IPv6 áttérési technikák egyes implementációinak teljesítőképesség- és stabilitás-vizsgálata. Répás Sándor

The modular mitmót system. DPY kijelző kártya C API

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Konkurens TCP Szerver

Tisztelt Telepítő! A központ és az alkalmazás összehangolását a következőképpen hajthatja végre:

A netfilter csomagszűrő tűzfal

Hálózati architektúrák laborgyakorlat

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

Információs Technológia

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Tisztelt Telepítő! 2. Ellenőrizze, hogy a modul engedélyezve van-e: Szekció [382] Opció 5 (alternatív kommunikátor) BE.

Az internet ökoszisztémája és evolúciója. Gyakorlat 2

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

1. Ismerkedés a Hyper-V-vel, virtuális gépek telepítése és konfigurálása

Ethernet/IP címzés - gyakorlat

Bevezetés, a C++ osztályok. Pere László

Java II. I A Java programozási nyelv alapelemei

Az internet ökoszisztémája és evolúciója. Gyakorlat 4

A Wireshark program használata Capture Analyze Capture Analyze Capture Options Interface

EMTP, EGY ÚJ LEVELEZÕ PROTOKOLL ÉS IMPLEMENTÁCIÓJA

Pénzügyi algoritmusok

Programozás 5. Dr. Iványi Péter

Két típusú összeköttetés PVC Permanent Virtual Circuits Szolgáltató hozza létre Operátor manuálisan hozza létre a végpontok között (PVI,PCI)

Multiprotocol encapsulation (RFC1483) - IETF Classical IP over ATM (RFC1577) - IETF LAN Emulation (LANE) - ATM Forum Multiprotocol over ATM (MPOA) -

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

Netis Vezetékes ADSL2+, N Modem Router Gyors Telepítési Útmutató

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

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Átírás:

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

Főbb pontok A kommunikáció alapjai Adatstruktúrák és típusok Konvertáló függvények Rendszerhívások Információs függvények 2

Kliens & Server Server szolgáltatást nyújt. Kliens igénybe veszi a szolgáltatást. Kommunikáció: Kapcsolat-orientált (TCP) Kapcsolat nélküli (UDP) Csatlakozó (socket) típusok: SOCK_STREAM (TCP) SOCK_DGRAM (UDP) Server Hálózat Kliens 3

Kapcsolat nélküli idődiagram Kliens socket setsockopt Server socket setsockopt bind sendto recvfrom close recvfrom sendto close idő 4

Kapcsolat-orientált idődiagram Kliens socket setsockopt connect send recv close Server socket setsockopt bind listen accept recv send close idő 5

A kommunikáció sémája Kapcsolat nélküli Kliens1 Szerver Kliens2 Kapcsolat-orientált Kliens1 Szerver Kliens2 6

Header állományok sys/socket.h netinet/in.h arpa/inet.h netdb.h unistd.h Egyes header állományok inkludálhatnak másokat. 7

Adatstruktúrák és típusok in_addr (netinet/in.h) sockaddr_in (netinet/in.h) sockaddr (sys/socket.h) hostent (netdb.h) netent (netdb.h) protent (netdb.h) servent (netdb.h) 8

in_addr struct in_addr { unint32_t s_addr; }; IPv4 címek tárolása 32 biten előjel nélküli egészként big-endian (hálózati) bájtsorrendben. INADDR_ANY: lokális címekre hivatkozás Példa a 127.0.0.1 cím tárolására: struct in_addr IP; IP.s_addr=16777343; // 0x0100003f 9

sockaddr_in struct sockaddr_in { short int sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; }; sin_family: cím család, pl. AF_INET. sin_port: port szám (2 byte) hálózati byte sorrendben. sin_addr: IP cím (4 byte) hálózati byte sorrendben. sin_zero: kitöltő, hogy sockaddr méretű legyen. 10

sockaddr struct sockaddr { unsigned short sa_family; char sa_data[14]; }; sa_family: cím család, pl. AF_INET. sa_data: protokoll cím. kompatibilitás: sockaddr_in 11

hostent struct hostent { char *h_name; //hivatalos nev char **h_aliases; //tovabbi nevek int h_addrtype; //cim csalad int h_length; //cím hossz char **h_addr_list;//cimek listaja }; #define h_addr h_addr_list[0] Host leíró információk. A h_aliases és h_addr_list tömb utolsó eleme NULL. 12

Konvertáló függvények inet_addr( ) inet_aton( ) inet_ntoa( ) inet_pton( ) inet_ntop( ) htonl( ) htons( ) ntohl( ) ntohs( ) 13

IP cím kezelés #include<sys/socket.h> #include<arpa/inet.h> struct sockaddr_in address; inet_addr(): char* long address.sin_addr.s_addr=inet_addr("127.0.0.1"); inet_aton(): char* in_addr inet_aton("127.0.0.1",&(address.sin_addr)); inet_ntoa(): struct in_addr char* printf("ip: %s\n",inet_ntoa(address.sin_addr)); 14

Byte sorrend konverzió #include <arpa/inet.h> gazdagép hálózati uint16_t htons(uint16_t hostshort) uint32_t htonl(uint32_t hostlong) hálózati gazdagép uint16_t ntohs(uint16_t netshort) uint32_t ntohl(uint32_t netlong) 15

Socket rendszerhívások socket( ) setsockopt( ) bind( ) listen( ) connect( ) accept( ) close( ) shutdown( ) select( ) send( ) sendto( ) sendmsg( ) write( ) recv( ) recvfrom( ) recvmsg( ) read( ) 16

socket int socket(int family, int type, int protokcol); Socket létrehozása. Visszatérési érték: OK: file leíró; hiba: -1 family: AF_INET type: SOCK_STREAM, SOCK_DGRAM protocol: 0 (default a type és a family alapján) #include<sys/socket.h> 17

setsockopt int setsockopt(int fd, int level, int cmd, char *arg, int len); Opciók beállítása. fd: file leíró, amit a socket ad. level: SOL_SOCKET cmd: SO_REUSEADDR, SO_KEEPALIVE arg: mutató a kívánt opciót tartalmazó bufferre, ahol a tárolt érték: 1. len: arg mérete. #include<sys/socket.h> 18

bind int bind(int fd, struct sockaddr *addrp, int alen); Socket hozzárendelése hálózati címhez. Visszatérési érték: OK: 0; hiba: -1 fd: file leíró, amit a socket ad. addrp: a saját hálózati címet leíró struktúra címe. alen: a címleíró struktúra mérete #include<sys/socket.h> 19

listen int listen(int fd, int backlog); Kapcsolatelfogadási szándék és queue méret beállítás. Visszatérési érték: OK: 0; hiba: -1. fd: file leíró, amit a socket ad. backlog: hány feldolgozatlan connect kérést tárol. #include<sys/socket.h> 20

connect int connect(int fd, struct sockaddr *addrp, int alen); Kapcsolat létrehozása. Visszatérési érték: OK: 0; hiba: -1. fd: file leíró, amit a socket ad. addrp: cél (server) cím. alen: a címleíró struktúra mérete. #include<sys/socket.h> 21

accept int accept(int fd, struct sockaddr *addrp, int *alenp); Kapcsolat elfogadása. Visszatérési érték: hiba: -1; OK: új file leíró fd tulajdonságaival. fd: file leíró, amit a socket ad. addrp: kliens címe ide kerül. alenp: híváskor addrp hossza, visszatéréskor kapott cím hossza. #include<sys/socket.h> 22

send int send(int fd, char *buff, int len, int flags); Kapcsolat-orientált adat küldés. Visszatérési érték: OK: átvitt byte szám; hiba: -1. fd: file leíró, amit a socket ad. buff: az üzenet (bájtsorozat). len: az üzenet hossza. flags: 0; MSG_OOB: nagy prioritás. #include<sys/socket.h> 23

sendto int sendto(int fd, char *buff, int len, int flags, struct *addrp, int alen); Nem kapcsolat-orientált adat küldés. Visszatérési érték: OK: átvitt byte szám; hiba: -1. fd, buff, len, flags: mint a send esetén. addrp, alen: mint connect esetén. #include<sys/socket.h> 24

recv int recv(int fd, char *buff, int maxlen, int flags); Kapcsolat-orientált adat fogadás. Visszatérési érték: OK: kapott byte szám; hiba: -1. fd: file leíró, amit a socket ad. buff: az üzenet (bájtsorozat). maxlen: a buffer hossza. flags: pl. 0; MSG_OOB csak az így küldött adatot veszi. #include<sys/socket.h> 25

recvfrom int recvfrom(int fd, char *buff, int maxlen, int flags, struct *addrp, int *alenp); Nem kapcsolat-orientált adat fogadás. Visszatérési érték: OK: kapott byte szám; hiba: -1. fd, buff, maxlen, flags: mint recv esetén. addrp, alenp: mint accept esetén. #include<sys/socket.h> 26

write, read int write(int fd, char *buff, int len); int read(int fd, char *buff, int mlen); Kapcsolat-orientált esetben használható küldésre, fogadásra. Visszatérési érték: OK: byte szám; hiba: -1. fd: file leíró, amit a socket ad. buff: üzenet (bájtsorozat). mlen, len: (max) üzenet hossz. #include<unistd.h> 27

close int close(int fd); Lezárja a socket-et. Visszetérési érték: OK: 0; hiba: -1. fd: file leíró, amit a socket ad. #include<unistd.h> 28

shutdown int shutdown(int fd, int how); Kapcsolat-orientált socket egyirányú lezárása. Visszatérési érték: OK: 0; hiba: -1. fd: file leíró, amit a socket ad. how: 0: nem lehet adatot átvenni tőle; 1 nem lehet adatot átadni neki; 2: egyik sem (close). #include<sys/socket.h> 29

Információs függvények getpeername( ) gethostname( ) gethostbyname( ) gethostbyaddr( ) getservbyname( ) getservbyport( ) getsockname( ) 30

getpeername int getpeername(int fd, struct sockaddr *addrp, int *alenp); Partner socket cím lekérdezés. Visszatérési érték: hiba esetén -1. fd: ezen a csatlakozón érhető el a távoli gép. addrp: ide kerül a távoli gép címinformáció. alenp: cím hossz. #include<sys/socket.h> 31

gethostname int gethostname(char *hname, size_t len); Helyi gép neve. Visszatérési érték: hiba esetén -1. hname: ide kerül a helyi gép neve. len: név hossz. #include<unistd.h> 32

gethostbyname struct hostent *gethostbyname( char *hname); Távoli fél azonosítás név alapján. Visszatérési érték: hiba esetén NULL. hname: a távoli gép neve. #include<netdb.h> 33

gethostbyaddr struct hostent *gethostbyaddr( char *addrp, int len, int family); Távoli fél azonosítás cím alapján. Visszatérési érték: hiba esetén NULL. addrp: keresett cím. len: cím hossz. family: cím család, pl. AF_INET. #include<netdb.h> 34