Interprosess kommunikasjon. Berkeley Sockets. Hvordan identifiserer jeg hvem jeg vil snakke til? Hva må programmene gjøre?

Like dokumenter
Løsningsforslag til eksamen i INF103

Løsningsforslag til eksamen i INF103

Del 1 En oversikt over C-programmering

KTN1 - Design av forbindelsesorientert protokoll

Kapittel 1 En oversikt over C-språket

6105 Windows Server og datanett

Del 4 Noen spesielle C-elementer

UNIVERSITETET I OSLO

6107 Operativsystemer og nettverk

Programmeringsspråket C Del 3. Hans Petter Taugbøl Kragset

6105 Windows Server og datanett

En oppsummering (og litt som står igjen)

Program socket server

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Hva består Internett av?

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Programmeringsspråket C

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

INF3190 Obligatorisk oppgave: Linklagets flytkontroll

Programmeringsspråket C

UNIVERSITETET I OSLO

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

IN 147 Program og maskinvare

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

UNIVERSITETET I OSLO

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Programmeringsspråket C

Linklaget. Olav Lysne. (med bidrag fra Stein Gjessing og Frank Eliassen) Oppsummering 1

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Oppgave 1 JK-flip-flop (Total vekt 20%)

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Dagens tema: Datastrukturer

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

Kap 6.3: Symboltabellen Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 17. mars Dagens tema:

Skal bindes opp til en deklarasjon av samme navn

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Cs preprosessor. Dagens tema. Betinget kompilering

Tjenester i Internett. E-post, HTTP, FTP, Telnet

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Lagene spiller sammen

Løsningsforslag Gruppeoppgaver mars 2003

Transport - laget (ende-til-ende protokoller) Internett Best-effort overføring. Best-effort nett kvaliteter

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Teorifagb, hus 3, og og Adm.bygget, Aud.max og B.

Sentrale deler av pensum i INF

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

Kapittel 4: Transportlaget

Del 2 Tabeller, arrays, strenger

6105 Windows Server og datanett

6105 Windows Server og datanett

6105 Windows Server og datanett

INF1060 Introduksjon til operativsystem og datakommunikasjon

Antall sider:5 (Inkludert denne) Alle skrevne og trykte hjelpemidler samt kalkulator

Oppsett av brannmur / router 1.0. Innholdsfortegnelse

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

Programmeringsspråket C Del 2. Michael Welzl

Løsningsforslag Gruppeoppgaver, 28. april 2. mai. 1. Metningskontroll ( Congestion control ) og ressursallokering.

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

INF Hjemmeeksamen 1 - Vår 2014 Bridging på linklaget

Gr.4. Socket programmering. Gr.4. Innlevering LAB 4. Gruppe 4. oppgaver

IN 147 Program og maskinvare

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Transport - laget (ende-til-ende protokoller) Glidende vindu protokoll. Flyt kontroll. dataoverføringsfasen. Sender. Mottaker

Forelesning Oppsummering

Programmeringsspråket C Del 2

INF 1000 høsten 2011 Uke september

Socket og ServerSocket

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1000 undervisningen INF 1000 høsten 2011 Uke september

IN 147 Program og maskinvare

Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

INF Oblig 2 semantikksjekk og kodegenerering

6107 Operativsystemer og nettverk

TwidoSuite kommunikasjon

Skal bindes opp til en deklarasjon av samme navn

Vektorer. Dagens tema. Deklarasjon. Bruk

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Obligatorisk Innlevering 2

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

2EOLJDWRULVNRSSJDYHQU L GDWDNRPPXQLNDVMRQ + VWHQ.,QQOHYHULQJVIULVWRNWREHU *MHQQRPJnVWRUVGDJRNWREHU

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Datatyper og typesjekking

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

Sentrale deler av pensum i INF240. Hensikt. Pål Spilling og Kjell Åge Bringsrud

IN 147 Program og maskinvare

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Emnekode: SOl35A Alle trykte og skrevne hjelpemidler

Transkript:

Interprosess kommunikasjon Berkeley Sockets Hvordan få to maskiner til å snakke sammen Maskin A...... typedef struct { char sawreceive; char sawsend; int packetpointer; char buf[packetlength+1]; linksession; SOCKET Maskin B...... typedef struct { char sawreceive; char sawsend; int packetpointer; char buf[packetlength+1]; linksession; SOCKET Sockets 1 Sockets 2 Hva må programmene gjøre? Hvordan identifiserer jeg hvem jeg vil snakke til? Program A Opprette en Socket (Opprette forbindelse) Kall på read/write Fjern Socketen Program B Opprette en Socket (Opprette forbindelse) Kall på read/write Fjern Socketen Maskinen ved internettadresse Applikasjonen/tjenesten/programmet ved portnummer en del standardapplikasjoner (f. eks finger og remote login) har sitt eget velkjente portnummer. Sockets 3 Sockets 4

Hva er en socket? Typer En peker til en Transport Kontroll Blokk (TCB). TCB består av to deler: En del som beskriver alle attributtene og tilstandsvariablene som trengs her. En del som beskriver det som trengs å vite om makkeren. Datagram (UDP) Pakkeorientert Best effort (Pakker kan bli borte) Forbindelsesløs Pålitelig (TCP) Strømorientert Alt som blir sendt kommer fram Forbindelsesorientert Sockets 5 Sockets 6 Hvordan skaffer jeg meg en socket? domain? type? protokoll? int sock,domain,type,protocol; sock=socket(domain,type,protokol) domain: AF_UNIX, AF_INET, type: SOCK_STREAM, SOCK_DGRAM, protokol: IPPROTO_TCP,... TCP UDP type IP Nett1 Nett2 Nett3 domain Sockets 7 Sockets 8

Binding av eget endepunkt Hvordan assosiere en adresse og et portnummer med en socket? int status, sock, addrlen; struct sockaddr_in *address; <Internettadressen og portnummeret settes i structen address. Eksempel på dette om et lite øyeblikk> bind(sock, address, addrlen); Sockets 9 Bygging av adressestruct Enten bzero(&serveraddr, sizeof(serveraddr)); /* Finn internettadressen ved oppslag i DNS. */ hostp = gethostbyname("mjollnir.ifi.uio.no"); /* Sett adressen inn i serverstructen */ memcpy((void *) &serveraddr.sin_addr, hostp->h_addr, hostp->h_length); Eller Oversett portnummeret til nettverksformat bzero(&serveraddr, sizeof(serveraddr)); /* Sett internettadressen til denne maskinen sine adresser */ serveraddr.sin_addr.s_addr = INADDR_ANY; Denne maskinen sine adresser Sockets 10 Forbindelsesetablering Klientsiden: Forbindelsesetablering Tjenersiden sock = socket(domain,type,protocol); <bygg opp adressen til serveren i struct en address > connect(sock, address, addresslen); <connect blokkerer inntil forbindelsen er etablert> read(sock,buf,buflen); send(sock,buf,buflen); sock = socket(domain,type,protocol); <bygg opp adressen til denne tjeneren i struct en address > bind(sock, address, addresslen); listen(sock, SOMAXCONN); /* SOMAXCONN er en konstant som gir en pasende kølengde */ newsock = accept(sock,fromaddr,fromlen); <accept blokkerer inntil en connect-request foreligger> read(newsock,,); send(newsock,,); Sockets 11 Sockets 12

Fjerning av socket Eksempel enkel klient close(sock); Merk at semantikken til close er avhengig av hvilken protokoll som kjøres noen implementasjoner kaster alle data som var underveis når close ble utført. #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> /* deklarasjon av litt datastruktur */ struct hostent *hostp; char buf[11]; main(){ /* Opprett socket */ sock = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); bzero((void *) &serveraddr, sizeof(serveraddr)); /* Finn internettadressen ved oppslag i DNS. */ hostp = gethostbyname("mjollnir.ifi.uio.no"); /* Sett adressen inn i serverstructen */ memcpy((void *) &serveraddr.sin_addr, hostp->h_addr, hostp->h_length); Sockets 13 Sockets 14 Enkel klient forts. Eksempel enkel tjener /* Koble opp */ connect(sock, (struct sockaddr *)&serveraddr, sizeof serveraddr); /* Send data */ write(sock, "Hei verden!", 11); /* les data fra forbindelsen */ read(sock, buf,11); /* legg til et termineringstegn, og skriv ut til skjerm */ buf[11] = '\0'; printf("%s \n",buf); /* Steng socketen */ close(sock); #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> struct sockaddr_in serveraddr, clientaddr; int clientaddrlen; int request_sock, new_sock; char buf[13]; main() { /* Opprett request-socket */ request_sock = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); Denne maskinen /* Opprett adressestruct */ sin adresse bzero((void *) &serveraddr, sizeof(serveraddr)); serveraddr.sin_addr.s_addr = INADDR_ANY; Oversett portnummeret /* bind adressen til socketen */ Til nettverksformat bind(request_sock, (struct sockaddr *)&serveraddr, sizeof serveraddr); Sockets 15 /* aktiver lytting på socketen */ listen(request_sock, SOMAXCONN); Kølengden til Lytte-socketen Sockets 16

Enkel tjener forts. Generelt for de fleste socketkall /* motta en forbindelse */ new_sock = accept(request_sock,(struct sockaddr *)&clientaddr, &clientaddrlen); /* les data fra forbindelsen, og skriv dem ut */ read(new_sock, buf,11); printf("%s \n",buf); /* Send data tilbake over forbindelsen */ write(new_sock, buf,11); /* Steng socketene */ close(new_sock); close(request_sock); Merk at kall på systemfunksjoner som har med kommunikasjon å gjøre som regel skal kunne feile uten at hele programmet gir opp: if ((sock=socket(domain,type,protocol))<0){ printf( Passende feilmelding ); Sockets 17 Sockets 18 Eksempel enkel klient igjen Enkel klient forts. #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> struct hostent *hostp; char buf[13]; /* Koble opp */ if (connect(sock, (struct sockaddr *)&serveraddr, sizeof serveraddr) < 0) { (void) close(sock); printf("feil under connect\n"); main() {/* Opprett socket */ if ((sock = socket(af_inet, SOCK_STREAM, IPPROTO_TCP)) < 0) { printf("feil under oppreting av socket\n"); bzero((void *) &serveraddr, sizeof(serveraddr)); /* Finn internettadressen ved oppslag i DNS. */ if ((hostp = gethostbyname("mjollnir")) == 0) { printf("ukjent maskin \n"); Sockets 19 /* Sett adressen inn i serverstructen */ memcpy((void *) &serveraddr.sin_addr, hostp->h_addr, hostp->h_length); /* Send data */ write(sock, "Hei verden!", 11); /* les data fra forbindelsen, og skriv dem ut til skjerm */ read(sock, buf,11); buf[11] = '\0'; printf("%s \n",buf); /* Steng socketen */ if (close(sock)) printf("feil under close\n"); Sockets 20

Men Sendte data kan komme frem omgruppert i forhold til hvordan de ble sendt Kompilatoren kan omgruppere, drivere kan omgruppere, og pakker fragmenteres og reassembleres i nettet. Rekkefølgen for mottak er den samme (TCP), men data som ble sendt sammen kan komme frem hver for seg. Et kall på read(sock, buf, 10) kan derfor gi færre enn 10 tegn. Kallet read(sock, buf, 10) returnerer med det antall tegn som faktisk ble lest. Sockets 21 En Tryggere read-prosedyre char safereadbyte(so) int so; { int bytes; char buf[1]; bytes = read(so, buf, 1); if (bytes<0) { perror("error in saferead"); if (close(so)) perror("close"); if (bytes<=0) { printf("server: end of file on %d\n",so); if (close(so)) perror("close"); return buf[0]; int saferead(so,buf, l) int so; char buf[]; int l; { int i; for (i=0; i<l; i++){ buf[i]=safereadbyte(so); return l; Men denne blokkerer dersom den ikke får det antall tegn den ber om. Sockets 22 Aktuelle prosedyrer Formatprosedyrer htonl,ntohl,htons,ntohs For dere er disse kun aktuelle for portnummere Ikkeblokkerende vent på input/ multipleksing fra flere inputkilder (f.eks terninal/nettverk) select,.. Litteratur Berkeley UNIX System Calls and Interprocess Communication Lawrence Besaw, University of Wisconsin (tilgjengelig via kurset sine web-sider) De eksemplene som er forelest her er også nedlastbare fra web-sidene. De danner et godt utgangspunkt for programmering av den obligatoriske oppgaven. En mengde bøker... Sockets 23 Sockets 24