1 / 19

010990001 - Tietoliikennetekniikan jatko-opintokurssi 2

010990001 - Tietoliikennetekniikan jatko-opintokurssi 2. Unix Network Programming The Sockets Networking API Chapter 1 - Introduction. Yleistä. Kirjassa mainitut lähdekoodit löytyvät osoitteesta: www.unpbook.com/src.html Haetaan ja puretaan komennoilla:

Download Presentation

010990001 - Tietoliikennetekniikan jatko-opintokurssi 2

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. 010990001 - Tietoliikennetekniikan jatko-opintokurssi 2 Unix Network ProgrammingThe Sockets Networking API Chapter 1 - Introduction

  2. Yleistä • Kirjassa mainitut lähdekoodit löytyvät osoitteesta: www.unpbook.com/src.html • Haetaan ja puretaan komennoilla: wget http://www.unpbook.com/unpv13e.tar.gz tar zxf unpv13e.tar.gz • Koodi löytyy nyt unpv13e -alihakemistosta cd unpv13e

  3. Yleistä • unpv13e/README kertoo kääntämisohjeet: ./configure • Käännetään peruskirjasto cd lib && make && cd - cd libfree && make && cd –

  4. socket & TCP/IP • socket-ohjelmointirajapinnat toimivat verkko-ohjelmoinnissa TCP/IP-mallin termein yhteyksinä sovelluskerrokselta kuljetuskerrokselle • kirjassa käsitellään sekä TCP:n ja UDP:n osaavien socketien käyttöä ja jopa IP-kerroksen jättämistä välistä

  5. Socket API - historiaa • Lähtöisin 4.2BSD -järjestelmästä vuodelta 1983 (Berkeley System Distribution) • sen jälkeen yleistyneet muissakin kuin BSD-pohjaisissa • Linuxin sockets API ei pohjaudu BSD apiin, vaan se on kehitetty tyhjästä (liekö ongelmia kirjan esimerkeissä?)

  6. UNIX-standardit, POSIX • Portable Operating System Interface on IEEE:n määrittelemä standardikokoelma • Useita versioita (IEEE Std 1003.1-1988, -1990, -1992, -1993, -1996) • Part 1: System API (C-kieli) (kirjassa POSIX.1), Part 2: Shell and utilities (kirjassa POSIX.2)Part 3: System administration • Tietoa eri POSIX-standardeista http://www.pasc.org/standing/sd11.html

  7. UNIX-standardit, Open Group • X/Open julkaisi 1992 Single Unix Specification -määrityksen • X/Open perusti Open software foundationin (OSF) kanssa 1996 Open Group:in • Open Group määritteli vuonna 1997 Single Unix Specification version 2 -määrityksen

  8. UNIX-standardit • Austin Common Standards Revision Group määritellyt 4000 sivua ohjelmistorajapintoja • Yhdistää IEEE:n POSIX - ja Open Groupin Technical standard -määritykset • Tuloksena ISO/IEC 9945:2002 aka IEEE Std 1003.1-2001 aka Single Unix Specification Version 3 • Kirjassa kutsutaan nimellä The POSIX Specification , kirjan pääpaino juuri tässä määrityksessä ja sen Sockets API:ssa • http://www.unix.org/version3/

  9. Asiakas/palvelin -malli

  10. Simple daytime client • Puolet asiakas/palvelin -mallin perusesimerkistä • lähdekoodi: intro/daytimetcpcli.c • kääntäminen: cd intro && make

  11. Simple daytime client • Muodostaa TCP-yhteyden palvelimelle ja kysyy siltä kellonajan • kertaa perusfunktiot: • socket() muodostaa TCP socketin • inet_pton() tekee merkkijonosta osoiterakenteen • connect() yhdistää palvelimeen • read() lukee socketista

  12. Virheentarkistus • Funktoiden palautusarvot kannattaa tarkistaa virheiden varalta • Kirjan koodin kirjastossa on luotu useille funktioille ns. päällysfunktiot, joissa on yhden funktion toiminnallisuus ja palautusarvon tutkinta • lähdekoodilistaukset ovat näin selvempiä ja näiden funktoiden käyttö omassa koodissa nopeampaa • Tällaisen funktion huomaa isosta alkukirjaimesta, esim. Socket() , Bind(), Listen()

  13. Päällysfunktiot • esim. lib/wrapsock.c - Socket() /* include Socket */ int Socket(int family, int type, int protocol) { int n; if ( (n = socket(family, type, protocol)) < 0) err_sys("socket error"); return(n); } /* end Socket */

  14. Simple daytime server • Vastapuoli mainitulle daytime client -ohjelmalle • Kuuntelee asiakasohjelmien yhteyspyyntöjä, hyväksyy yhteyden ja lähettää ajan • lähdekoodi: intro/daytimetcpsrv.c • Mainitut päällysfunktiot käytössä

  15. Simple daytime server • socket() korvattu Socket() :lla • Bind() sitoo paikallisen osoitteen socketiin • IP-osoitteena INADDR_ANY • porttina 13 (daytime) • Listen() asettaa kuuntelemaan yhteyksiä • Accept() hyväksyy yhteyden ja luo yhteyssocketin, Write() lähettää merkkijonon (ajan) asiakkaalle

  16. daytime-esimerkki • Esimerkki on IPv4-riippuvainen • IPv6-toimivuus muutamalla muutoksellaintro/daytimetcpcliv6.c • molempien kanssa yhteensopiva käsitellään myöhemmin kappaleessa 11 • daytime esimerkkinä läpi kirjan, ominaisuudet vaan muuttuvat ja täydentyvät • toisena esimerkkinä kaiuttava (echo)

  17. Harjoitus 1.1 & 1.2 • Kappaleen 1.9 lopusta löytyy ohjeet verkkotopologiatiedon saamiseen • komentoja netstat -ni ; netstat -nr , ifconfig • lähdekoodin haku ja kääntäminen esitelty jo aikaisemmissa kalvoissa - aja daytimetcpcli eri IP osoitteilla muutaman kerran

  18. Harjoitus 1.3 & 1.4 • Muokkaa daytimetcpcli.c:n socket-kutsun ensimmäinen argumentti (AF_INET) 9999:ksi. Etsi errno -arvo tulostetulle virheelle • Lisää asiakasohjelmaan while-looppiin laskuri, joka lisääntyy yhdellä kun read palauttaa > 0

  19. Harjoitus 1.5 • Vaihda daytimetcpsrv.c:n portti 13:sta 9999:ksi, vaihda write-kutsu silmukaksi, joka kutsuu write():ä (ajan merkkijonon) tavu kerrallaan • Vaihda myös asiakasohjelmasta (versiosta, joka tulostaa laskurin) portti 9999:ksi • Mitä asiakasohjelman laskurina tulostetaan?

More Related