1 / 16

Süsteemprogrammeerimine keeles C ja C#

Süsteemprogrammeerimine keeles C ja C#. Neljateistkümnes loeng. Eelmisest korrast. Protsesside omavaheline suhtlus samas masinas puudu Protsessidevaheline kommunikatsioon üle võrgu. Socketid (maakeelde ei vääna!). Socketid on võrguprotokollist suhteliselt sõltumatu abstraktsioon

steven-moss
Download Presentation

Süsteemprogrammeerimine keeles C ja C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Süsteemprogrammeerimine keeles C ja C# Neljateistkümnes loeng

  2. Eelmisest korrast Protsesside omavaheline suhtlus samas masinas puudu Protsessidevaheline kommunikatsioon üle võrgu

  3. Socketid (maakeelde ei vääna!) Socketid on võrguprotokollist suhteliselt sõltumatu abstraktsioon Klient/Server idee: üks ootab, teine ühendub

  4. Socketeid on palju Ühendused käivad reeglina pordilt pordile Iga ühenduse jaoks on vaja vähemalt ühte socketit http://www.csse.monash.edu.au/courseware/cse3420/Lectures/Module4/topic1.html

  5. Socketeid on mitmesuguseid Ühenduv socket (Klient) Kuulav socket (Server) Eriotstarbeline socket (nt raw socket) Saab jaotada ka protokolli järgi: Ühendusega protokolli socket (nt TCP) Ühenduseta protokolli socket (nt UDP) IPC socket (väga levinud IPC variant UNIXi all)

  6. Kasutamiseks hulk “System Call'e” http://comet.ctr.columbia.edu/distributed/programming/tuto1/sld004.htm

  7. Kasutamiseks hulk “System Call'e” http://comet.ctr.columbia.edu/distributed/programming/tuto1/sld005.htm

  8. Ühenduse tekitamine (Klient) Luua socket s = socket(addrtype, SOCK_STREAM, 0) Ühenduda connect(s,(struct sockaddr *)&sa,sizeof sa) Lugeda/Kirjutada recv/send(s, buf, len, 0) (Windows) võiread/write(s, buf, len) (UNIX) Sulgeda socket closesocket(s) (Windows) või close(s) (UNIX)

  9. Sockaddr atribuudi täitmine Sockaddr näitab aadressi kuhu ühenduda IP põhist varianti (sockaddr_in) saab täita kas: Otse IP aadressi ja pordiga Tehes kõigepealt nimest IP ja lisades pordi Täitmine aadressiga: sock_addr.sin_addr.s_addr = inet_addr(“195.222.0.1”); sock_addr.sin_port = htons(5115); sock_addr.sin_family = AF_INET

  10. Baidijärjekord on oluline! Võrgust lugedes ja kirjutades PEAB arvestama baidijärjekorraga Selleks on kaks paari funktsioone: ntohs ja htons – short int tüüpi andmete jaoks ntohl ja htonl – long int tüüpi andmete jaoks Tekstiliste andmete (stringid, charid) puhul oleneb konvertimine KOODITABELIST!

  11. Näited! Lihtne klient, mis ühendub ja loeb (finger) Lihtne klient, mis küsib pealehte (http)

  12. Ühenduste vastuvõtmine (Server) Luua socket s = socket(addrtype, SOCK_STREAM, 0) Määrata kuulatav aadress ja port bind(s,(struct sockaddr *)&sa, sizeof(struct sockaddr_in)) Alustada kuulamist listen(s, n)

  13. Kliendi teenindamine (Server) Iga kliendi jaoks: Võtta ühendus vastu t = accept(s,NULL,NULL) Lugeda/Kirjutada recv/send(t, buf, len, 0) (Windows) võiread/write(t, buf, len) (UNIX) Sulgeda socket closesocket(t) (Windows) või close(t) (UNIX)

  14. Serveri arhitektuur Saab valida nelja variandi vahel: Teenindatakse ainult üht klienti (single connection) Teenindatakse n klienti mitme protsessiga Teenindatakse n klienti mitme threadiga Teenindatakse n klienti mitteblokeeruva I/O abil Kui võimalik tasub eelistada threaditud mudelit, samas UNIXi jaoks on internetis palju valmis koodi, mida saab taaskasutada: GIYF!

  15. Näited! Single connection ainult kirjutav server Esimese edasiarendus threadide peale Lugev ja kirjutav server

  16. Materjale iseseisvaks lugemiseks http://www.frostbytes.com/~jimf/papers/sockets/sockets.html http://www.cs.rpi.edu/courses/sysprog/sockets/sock.html http://www.scit.wlv.ac.uk/~jphb/cp3024/notes/slides/week1.l.00.html http://www.troubleshooters.com/codecorn/sockets/ http://comet.ctr.columbia.edu/distributed/programming/tuto1/sld001.htm http://www.cs.utexas.edu/users/lavender/courses/socket++/ http://www.csse.monash.edu.au/courseware/cse3420/Lectures/Module4/topic1.html

More Related