1 Sockets Traditionellt har UNIX varit svag på IPC, InterProcess Communication. I augusti 1983 kom en ny IPC-mekanism i 4.2BSD som var enkel om konsistent.

Slides:



Advertisements
Liknande presentationer
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 1 ( ) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering.
Advertisements

En introduktion till ’Hård Infrastruktur’
Frågor Allmän IT-kunskap avsnitt 1 kapitel 1 Repetition 4
Maria Kihl och Jens A Andersson Kapitel 9: Applikationer.
Mjukvara och nätverk Vad är det?.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
De fundamentala datatyperna
Nätverk och Java, grunder Föreläsning 6
Metoder i java Det finns två typer av metoder i java
C-programmering ID120V William Sandqvist Länkad lista
Nätverkskommunikation
Programmeringsteknik K och Media
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Distribuerade filsystem
Introduktion till IT och e-Tjänster Delkurs 3 1 Datorer i Nätverk En introduktion till ’Hård Infrastruktur’ DEL 2.
Java Nätverks API URL sockets.
Stora additionstabellen
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
i olika programmeringsspråk
Föreläsning 11 Arrayer.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Programmering i C# 3. Klasser.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
1 1 Musikprogrammering och mobil ljuddesign Föreläsning 4 Kommunikation över nätverk – UDP och MaxMSP.
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
NÄTVERKSPROTOKOLL Föreläsning
Av Oliver och Emil. En kort historia om Internet Datorn uppfanns i slutet av 1950-talet. Det var då man försökte koppla ihop flera datorer för att skicka.
Lektion 3 Mahmud Al Hakim
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
William Sandqvist C:s minnesmodell.
DATABASHANTERING för programmerare Lektion 4 Mahmud Al Hakim
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
© 2007 Cisco Systems, Inc. All rights reserved.Cisco Public ITE PC v4.0 Chapter 1 1 Operating Systems Networking for Home and Small Businesses – Chapter.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 12 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 11 ( ) Innehåll: - Förmedling av fildeskriptorer.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
© 2007 Cisco Systems, Inc. All rights reserved.Cisco Public ITE PC v4.0 Chapter 1 1 Network Services Networking for Home and Small Businesses – Chapter.
UDP Pålitlig byteström TCP
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Network Services (Nätverkstjänster) Client/Servers And Their Interaction (Client/Server och deras interaktion)
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
NÄTVERKSPROTOKOLL Föreläsning INNEHÅLL - DHCP (Dynamic Host Configuration Protocol)‏
6558/G558 DATAKOMMUNIKATION Jan Westerholm hösten 2005 / andra perioden.
Föreläsning 4 Klasser Och Objekt.
BVForum - en genomgång för revisorer Sören Thuresson.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Fildeskriptorer -Filhantering -Felhantering.
William Sandqvist Distributed Computing Client – Server. En skrivarserver kan vara ett exempel på en Client-Server arkitektur. S Burd, Systems.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Karlstads universitet Datavetenskap DAVA07/08 JE,MG,MG,PS Kontraktsprogrammering.
Nätverk.
Datorkommunikation Lektion 8 Mahmud Al Hakim
Socketprogrammering Klient/server Protokollstacken TCP UDP Java C Avlusning Versionshantering.
Nätverkskommunikation
10 Kommunikation i Java Skansholm kap 18
Presentationens avskrift:

1 Sockets Traditionellt har UNIX varit svag på IPC, InterProcess Communication. I augusti 1983 kom en ny IPC-mekanism i 4.2BSD som var enkel om konsistent. I denna version fick man möjlighet att koppla upp sig mot ARPANET. I april 1986 designades hela IPC-systemet om till ett oberoende system i och med lanseringen av 4.3BSD. IPC kan ske mellan Processer i en maskin Processer över ett nätverk Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

2 Allmänt om sockets En socket: Är en ändpunkt vid kommunikation Kan knytas till ett namn Existerar i en kommunikationsdomän Har en typ Kommunikationsdomäner Specificerar en protokollstack AF_UNIX: Lokal UNIX-domän. Används inom en dator AF_INET: ARPANETs domän. Används över nätverk Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

3 Olika typer av sockets SOCK_STREAM, strömmande överföring [TCP] Pålitlig Sekventiell överföring Inga kopior skapas Ingen maximal storlek på paketen SOCK_DGRAM, datagram överföring [UDP] Opålitlig Viss storlek på paketen SOCK_RAW, ren socket [IP] Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

4 Hur skapas en socket En socket skapas med anropet: s = socket(domän, typ, protokoll); Returvärdet är en fildeskriptor (int) Exempel: int s = socket(AF_UNIX, SOCK_STEAM, 0); int s = socket(AF_INET, SOCK_DGRAM, 0); Dessa konstanter finns deklarerade i filerna och Om anropet misslyckades returneras -1 Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

5 Namngivning av en socket En socket skapas utan ett namn, men för att kunna användas måste den ges ett namn. De två kommunicerande processer kopplas ihop med en association: AF_UNIX: AF_INET: Hälften av denna association skapas med: bind(socket, name, namelength) Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

6 Strukten sockaddr_in Det finns en struct i filen som används för att innehålla information om uppkopplingen. struct sockaddr_in { short sin_family; // Adressfamilj u_short sin_port; // Portnummer in_addr sin_addr; // Internetadress char sin_zero[8] // Oanvänt }; Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

7 Adressering Bind fyller i vår struct sockaddr_in med information. Det som fylls i är den information som vi från vår sida vet, dvs informationen lokal adress och port. Exempel struct sockaddr_in server;... server.sin_family = AF_INET; // Internet server.sin_addr.s_addr = INADDR_ANY; // Valfritt NIC server.sin_port = 0; // Valfri port bind(socket, (struct sockaddr *)&sin, sizeof(sin)); Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

8 Representation av tal Olika datorer representerar tal olika ”rätt ordning” – network byte order Most significant byte first (big endian) ”min ordning” – host byte order Konvertera tal innan sändning med htonl eller htons Konvertera tal innan sändning med ntohl eller ntohs

9 Ta reda på information gethostname(name,namelen) getpeername(sockfd,name,namelen) getsockname(sockfd,name,namelen) getservent,getservbyname,getservbyport getprotoent, getprotobyname, getprotobynumber gethostbyname(name) gethostbyaddr(addr)

10 Structen hostent Structen hostent innehåller information om en dator och fylls i med gethostbyaddr() eller gethostbyname() struct hostent { char *h_name; // Datorns namn char **h_aliases; // Alias för datorn int h_addrtype; // Adresstypen int h_length; // Adressens storlek char **h_addr_list; // Lista på adresser }; Datakommunikation IISockets Christian Ohlsson, Karlstads universitet 2001

11 Listen Lyssnar efter uppkopplingsbegäran listen (sockfd,backlog) Kan ej användas på datagramsockets backlog anger maxstorleken på kön där uppkopplingsbegäran väntar

12 Accept Accepterar en uppkopplingsbegäran new_sockfd = accept(sockfd,addr,addrlen) En ny socket skapas för kommunikation med den anropade klienten. Fyller structen addr med info om klienten addrlen – efter anrop den aktuella storleken på addr

13 Connect Klienten kopplar upp sig mot servern connect (sockfd,addr_to,addr_to_len) addr_to är adressen till servern

14 Så skapas en uppkoppling En process är server och den andra är klient Servern: Skapar en socket (socket(…)) Ger den ett namn (bind(…)) Väntar på en uppkopplingsbegäran (listen(…)) [TCP] Accepterar uppkopplingsbegäran (accept(…)) [TCP] Klienten Skapar en socket (socket(…)) Ger den ett namn (bind(…)) [UDP] Gör uppkopling mot servern (connect(…)) [TCP] Efter detta har vi en uppkoppling->datautbyte kan ske Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

15 Ta emot och skicka data Systemanropen read & write går att använda read (sockfd,buf,bufsize) write (sockfd,buf,bufsize) Send och recv för sockets send (sockfd,buf,bufsize,flags) recv (sockfd,buf,bufsize,flags)

16 Ta emot och skicka datagram Ingen uppkoppling krävs, men adressen får anges varje gång recvfrom(sockfd,buf,bufsize,flags,addr_from,addr_from_len) sendto(sockfd,buf,bufsize,flags,addr_to, addr_to_len) recvmsg(sockfd,msg,flags) sendmsg(sockfd,msg,flags)

Christian Ohlsson, Karlstads universitet 2001 Sockets Datakommunikation II socket bind accept listen socket connect writeread writeread Server Klient Blockerar tills Klienten gör connect Data (request) Data (reply) TCP uppkoppling

18 printsin Funktionen printsin skriver ut information om datorn som begärde en uppkoppling. void printsin(struct sockaddr_in *sin) { struct hostent *gethostbyaddr(), *h; h = gethostbyaddr((char *)&sin->sin_addr, sizeof(int),AF_INET); printf (”Ny uppkoppling från \n",h->h_name); } Christian Ohlsson, Karlstads universitet 2001 SocketsDatakommunikation II

Sockets #include void main(){ int listsock, datasock, length; /* Fildeskriptorer och variabel */ struct sockaddr_in server, client; char ch; if ( (listsock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) { perror(“Server kunde ej skapa socket"); exit(1); } bzero((char *) &server, sizeof(server)); /* Nolla ut structen */ server.sin_family = AF_INET; /* Internetdomänen */ server.sin_addr.s_addr = htonl(INADDR_ANY); /* Valfritt NIC */ server.sin_port = 0; /* 1:a lediga port */ if (bind(listsock, (struct sockaddr *)&server, sizeof(server)) < 0) { perror(“Server kunde ej binda adressen"); exit(1); } length = sizeof(server); /* Hämta in storleken på structen */ if (getsockname(listsock, (struct sockaddr *)&server, &length) < 0) { perror(“Server kunde ej hämta in namnet"); exit(1); } printf(“Server använder port: %d\n", ntohs(server.sin_port)); listen(listsock,1); /* Initiera lyssnarkön */ length = sizeof(client); /* Hämta in storleken på structen */ if((datasock=accept(listsock,(struct sockaddr *)&client,&length))<0) { perror(“Server kunde ej tillåta ny uppkoppling"); exit(1); } printsin(&client); printf("\nInkommande data:\n"); while ( read(datasock, &ch, 1) == 1) /* Läs från datasocketen */ putchar(ch); /* Skriv ut tecknet som lästs */ putchar('\n'); } Christian Ohlsson, Karlstads universitet 2001 TCP/IP server

Datakommunikation II Sockets #include char msg[] = { ”Detta är ett test" }; /* Teststräng */ void main(int argc, char **argv) { char *servername; /* Namnet på servern */ u_short serverport; /* Port som data skall färdas på */ int datasock; struct sockaddr_in klient; struct hostent *h; if (argc != 3) { fprintf(stderr,”Skriv: klient \n"); exit(1); } servername = argv[1]; /* Hämta in namnet */ serverport = atoi(argv[2]); /* Hämta in porten */ if ( (datasock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) { perror(”Klient kunde ej skapa socket"); exit(1); } bzero((char *) &klient, sizeof(klient)); /* Nolla ut structen */ klient.sin_family = AF_INET; if ((h = gethostbyname(servername)) == NULL) { /* Fyll i structen */ perror(”Klient kunde ej hämta namnet"); exit(1); } bcopy((char *)h->h_addr, (char *)&klient.sin_addr, h->h_length); klient.sin_port = htons(serverport); if(connect(datasock,(struct sockaddr *)&klient,sizeof(klient)) < 0) { perror(”Klienten kunde inte koppla upp"); exit(1); } write(datasock, msg, sizeof(msg)); /* Skriv meddelandet på socketen */ close(datasock); /* Stäng socketen */ } Christian Ohlsson, Karlstads universitet 2001 TCP/IP klient