PRATICA - Lezione 1. Autunno PRATICA (Lez. 1)
|
|
- Lia Scala
- 6 anni fa
- Visualizzazioni
Transcript
1 PRATICA - Lezione! " # $ &%' ( "*)+,.-/ * "* ) :47;!<$<>=9=@?BA 2 PRATICA (Lez. ) #include <stdio.h> int main(int argc, char **argv) { union { short s; char c[sizeof(short)]; un; un.s = x2; printf("cpu = %s - byte ordering: ",getenv("cpu")); if (sizeof(short) == 2) { if ( un.c[] == && un.c[] == 2 ) printf ("big-endian\n"); else if ( un.c[] == 2 && un.c[] == ) printf ("little-endian\n"); else printf("unknown\n"); else printf("size of short: %d.\n",sizeof(short)); exit();
2 6 6 A'69< := ; *=@69? ; = 3 PRATICA (Lez. ) 4 ; 6947<>;!4 >= /69478? >A =@?6:= >6:8:8?=@4 ; 6:= >698:8 6 69? =!:4!4 =" # =@? $ 8% &' 8)( 6* &+ &' 8)(-,<./ ="!; ''' (- <%./ =!2(43 <. =@? :; (456( :<;>= <>;?''' ; ;< < = 4 PRATICA (Lez. ) #Makefile ALL = lib-errori lib-corso-reti \ daytimesrv daytimecli daytimesrv-ric \ echosrv echocli echosrv-sigh all: $(ALL).c: lib-errori.o compiling $< with rule gcc $< -g -O Werror -o $@ lib-errori.o lib-corso-reti.o > lib-errori: lib-errori.c gcc -g -O -Werror -c lib-errori.c lib-corso-reti: lib-corso-reti.c gcc -g -O -Werror -c lib-corso-reti.c clean: rm -f $(ALL) rm -f *~ rm -f *.o
3 8 < :=6 5 PRATICA (Lez. ) robdep@zircone:~/corsi/reti/c> gmake gcc -g -O -Werror -c lib-errori.c gcc -g -O -Werror -c lib-corso-reti.c compiling daytimesrv.c with rule gcc daytimesrv.c -g -O -Werror -o daytimesrv lib-errori.o lib-corso-reti.o compiling daytimecli.c with rule gcc daytimecli.c -g -O -Werror -o daytimecli lib-errori.o lib-corso-reti.o compiling daytimesrv-ric.c with rule gcc daytimesrv-ric.c -g -O -Werror -o daytimesrv-ric liberrori.o lib-corso-reti.o compiling echosrv.c with rule gcc echosrv.c -g -O -Werror -o echosrv lib-errori.o libcorso-reti.o,=!:4 47= % >=@? < = A 4 ;$= = :;=@? < 4 >? " :=4 < ;?/:;4 69< := ; 6:4 /4 =@? < /4 ="! =@?< 9''' 694. :=947= 4 ; 6 PRATICA (Lez. ) A 4 ;$= = :;=@? < 4 >? " ;% =!:4!4 =" =" ="; %6? (-? 6<>;!? :6:=69< := ; *=@6?/ ;$47="!4;%:= ; = =!:4 47= ; ;$=@?:6 = ;?/;!4 # /4 =! /4 6 ; =! -'''$) >? :=@4 < 694. = = ; 6? (-, =!:4!4 =;%:= < ; # 6? =? :47=? $
4 :!; /=<' 7 PRATICA (Lez. ) #ifndef BASIC #define BASIC #include <sys/types.h> /* basic system data types */ #include <sys/socket.h> /* basic socket definitions */ #include <sys/time.h> /* timeval{ for select() */ #include <time.h> /* timespec{ for pselect() */ #include <netinet/in.h> /* sockaddr_in{ and other Internet defns */ #include <arpa/inet.h> /* inet(3) functions */ #include <errno.h> #include <unistd.h> #include <sys/wait.h> #include <sys/un.h> /* for Unix domain sockets */ #define MAXLINE 256 #define PORT 2345 #define BACKLOG 5 #define MAX(a, b) ((a) > (b)? (a) : (b)) #endif,=!:4!4 =;$8 < =@6?= = 8 PRATICA (Lez. )? 47<>=@?;?6* =@69? :47698:47;!<>< ;!4 4 < /8!4 4 = ;!< :;%/6 6*! =@;<>;?6 =
5 =,=!:4!4 =;% 694/6 4 9 PRATICA (Lez. ) 4 = 4 = 4 ; :? = 47=? 4 4 = 4 ; 4 =?! " PRATICA - Lezione 2! " # $ &%' ( "*)+,.-/ * "* )+ 2
6 $ 6 ; ;?B=@? :=@47= *63*32 <?;:694?B=@? :=@47= *63*32 <?;:694 ;%? ;% " ; ? *=@69?=!4 =/6 2 %! '& ( " )( ( $+*-, socket() bind() listen() CLIENT socket() connect() write() read() accept() read() write() SERVER close()! " #! read() close()
7 6 ;<:4 3 struct in_addr { in_addr_t s_addr; /* 32-bit, network byte ordered */ struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; /* tipo di protocollo, AF_INET */ in_port_t sin_port; /* 6-bit, network byte ordered */ struct in_addr sin_addr; /* struttura indirizzo IP */ char sin_zero[8]; struct sockaddr { uint8_t sin_len; sa_family_t sin_family; /* tipo di protocollo: AF_XXX */ char sa_data[4]; /* indirizzo specifico del protocollo */ & (! "# $ " % &('*)+*,-. / '23 4! '*4 % 65'% 7 % ' '* 9( : 4 3" $ "'2 (! % % ; :# 8,?8 < 4 4 /6 4
8 * $ $ $,,, (, (? *=@6?/ %/6 5 69?6 :4 </=:; 6 /6 =?//=" <? =? 476 /; 6 69< = 47= 694?6?!4 /; 66< /6 < 4 =" 694 =" 4/; 6 = /69?6 = = := B6 <!?6 ; 6 </6B<$6:6 / ( ( ( / & ( " /? *=@6?/ %/6 ;? =? 476 = = ; ; % ;<>=@84 =@; := :4 6 =@?!? /;!4 6 6 =/= / / / / ( / $! % (#" ( %$ /! ('& ( )( *+-, (. %! (!! +/ ;? =? 476 := >= =" :6:=/6 * $+*-, * % " ( 2 * +$ 3546* % 7 " * +$,3 *+58 % % % / '& ( 9 6 : 47;!?? 4 * *+58
9 ;? *=69? 69??/ < 7! / (. #" & (!$ ( +. (+. / ( / ( ( (!" ( $# 8&% ;'% 8A 5)(*(*+ 8 ; ,45 % ;.(/+48 A*,? *=@69?!:=? 8 / " (+. #" &! " $!! ( (+. / 4 ( / ( ( (!" ( $# =? :=@47= 63*3 #!4?; >=@? :64!? 47;!<%!:=? <?6 4 ; $ 3( 797/+ (65 :
10 $ ; ;? *=69?? ="? ;? /6 4 ; 6 ; = 6 4 $=!4?/ /= ;< ; %/=@;$= /6 :=?< ="? ( :=@;8:47;!<$<>;>;% = %+A 32 ;< 6 4 :; * # 3 :!; / Server accept # # # connect dal client
11 ? *=69? >; < 2! / (. #" & %#$! (. (+. / 4 ( / ( ( (-" ( (. 9 " % ( >?69? >? /6?6/=!4 6 ; 3? 47= < =!? =@;< ; ; 69? =!? >= =?=@?8+/6 6947?6 69? =? >= /6 6?? </6 ;;4 =6 ;!4 7 ;. =< 4!49# & $ 22 #include "basic.h" #include <time.h> int main(int argc, char **argv) { pid_t pid; int listenfd, connfd; struct sockaddr_in servaddr; char buff[maxline]; time_t ticks; struct servent *sp; if( (listenfd = socket(af_inet, SOCK_STREAM, )) < ) err_sys("socket error"); daytimesrv.c if( (sp = getservbyname("daytime", "tcp")) == NULL ) { fprintf(stderr, "getservbyname error for daytime, tcp."); exit(-); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = sp->s_port; if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < ) err_sys("bind error"); if( listen(listenfd, BACKLOG) < ) /* backlog = 5 */ err_sys("listen error");
12 ; 7 ;. =< 4!49# $ 23 for ( ; ; ) { if( (connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < ) err_sys("accept error"); ticks = time(null); snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks)); write(connfd, buff, strlen(buff)); close(connfd); 4 >= =!??6 ; ; 6 ;!? :6? =!? 69??/ </6 =!8? % =!? ; ;4 ;!:=!49!4 4 < 4 = = 69< >= :;. = < 7 ;. =< < ="? # & $ 24 #include "basic.h" int main(int argc, char **argv) { int sockfd, n; char recvline[maxline + ]; struct sockaddr_in servaddr; struct in_addr **pptr; struct hostent *hp; struct servent *sp; daytimecli.c if (argc!= 3) err_quit("usage: daytimecli <hostname> <service>"); if ( (hp = gethostbyname(argv[])) == NULL) err_quit("hostname error for %s: %s", argv[], hstrerror(h_errno)); if ( (sp = getservbyname(argv[2], "tcp")) == NULL) err_quit("getservbyname error for %s", argv[2]); pptr = (struct in_addr **) hp->h_addr_list;
13 7 ;. =< < ="? # $ 25 for ( ; *pptr!= NULL; pptr++) { if( (sockfd = socket(af_inet, SOCK_STREAM, )) < ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = sp->s_port; memcpy(&servaddr.sin_addr, *pptr, sizeof(struct in_addr)); if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == ) break; /* success */ err_ret("connect error"); close(sockfd); if (*pptr == NULL) err_quit("unable to connect"); while ( (n = read(sockfd, recvline, MAXLINE)) > ) { recvline[n] = ; /* null terminate */ fputs(recvline, stdout); exit(); = 694/= = 26 pid_t int pid; listenfd, connfd; listenfd = socket(.); /* riempi la struttura sockaddr_in (es. numero di porta) */ bind(listenfd,.) listen(listenfd, LISTENQ) for ( ; ; ) { connfd = accept(listenfd, ); if ( (pid = fork()) == ) { close(listenfd); /* figlio chiude il socket di ascolto */ DOIT(connfd); /* serve la richiesta */ close(connfd); /* chiude il socket */ exit(); /* il figlio termina */ close(connfd); /* il padre chiude il socket della connessione */
14 4 4 47= 694/= = 27 Client connect() Richiesta di connessione Server listensd =@;<>;>; < =!? 4!; 6?? 6 6/6 ; 69??/ </=@69? 69? 6 :;!4 # $ 47= 64?!4 4 4 =6 ;4 % =!? Client connect() Connessione stabilita Server listensd connsd = 694/= = 28 Client connect() Connessione stabilita Server listensd connsd padre Server listensd =;!<$;% 694 # $ 35;<:4 % =84 =@6? ? := =":69?6 =/6 connsd figlio
15 ,, = 694/= = 29 Client connect() Server listensd 3 :;<:4 Connessione stabilita = >=/6, " ( )( ( 3 =@84 =@6 = >= /6 6?? </=@69?= " ; 69?? /=69?!4 ; connsd listensd connsd ; *=69? :=9? 6 Server padre figlio, / ( ( )( / / = /6?;< >8 <!47?;!<% " -( # ' ' & : ": %' '.!#" ( & # 4 3" : ' $&%'() *++ %'., -* & +!#" 3. '3 ' '/2)*!3' '. 2 3 ' '354 += 6947?;?6 / 6 & & ( / (" / ( ( / (. 6 & & ( / / 6 / ( / ( / / )( ( ( / ( , / &! ( & ( 98 / % ( 9:, / ( / 6 & & ( ( ( ( %"<;, & ( % ( >= #! % ( ( % / 6 & & ( $@?:2ACB>B>D A2E+( 3 ( % ( GF %"* / / & & / / )(! ( /(" 3 ' & (! 'KJ" ('* & 7 IH
16 8 6!4!49# & $ 3 #include #include "basic.h" "echo.h" echosrv.c int main(int argc, char **argv) { pid_t childpid; int listenfd, connfd; struct sockaddr_in servaddr, cliaddr; socklen_t cliaddr_len; if( (listenfd = socket(af_inet, SOCK_STREAM, )) < ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(port); /* daytime server */ if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < ) err_sys("bind error"); if( listen(listenfd, LISTENQ) < ) err_sys("listen error"); 8 6!4!49# $ 32 for ( ; ; ) { cliaddr_len = sizeof(cliaddr); if( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &cliaddr_len)) < ) err_sys("accept error"); if( (childpid = fork()) == ) { close(listenfd); str_echo(connfd); exit(); close(connfd); void str_echo(int sockfd) { ssize_t n; char line[maxline]; for ( ; ; ) { if ( (n = read(sockfd, line, MAXLINE)) == ) return; /* connection closed by other end */ write(sockfd, line, n);
17 8 6< =? # & $ 33 #include "basic.h" #include "echo.h" int main(int argc, char **argv) { int sockfd, n; struct sockaddr_in servaddr; echocli.c if (argc!= 2) err_quit("usage: echotcpcli <IPaddress>"); if ( (sockfd = socket(af_inet, SOCK_STREAM, )) < ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); /* echo server */ if (inet_pton(af_inet, argv[], &servaddr.sin_addr) <= ) err_quit("inet_pton error for %s", argv[]); if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < ) err_sys("connect error"); str_cli(stdin, sockfd); /* svolge tutto il lavoro del client */ exit(); 8 6< =? # $ 34 void str_cli(file *fp, int sockfd) { char sendline[maxline], recvline[maxline]; while (fgets(sendline, MAXLINE, fp)!= NULL) { reti_writen(sockfd, sendline, strlen(sendline)); if (reti_readline(sockfd, recvline, MAXLINE) == ) err_quit("str_cli: server terminated prematurely"); fputs(recvline, stdout);
18 ; $ 8 6 4!4 35, % / ( / / / +& prompt > echoserver & [] 23 prompt > netstat a Proto Recv-Q Send-Q Local address Foreign address (state) Tcp *.9877 *.* LISTEN prompt > echoclient / prompt > netstat a Proto Recv-Q Send-Q Local address Foreign address (state) Tcp localhost.9877 localhost.52 ESTABLISHED Tcp localhost.52 localhost.9877 ESTABLISHED Tcp *.9877 *.* LISTEN 8! ( % ( / )( ( 9: / 8 6 4!4 36 prompt > echoclient Ciao server Ciao server Arrivederci Arrivederci ^D prompt > Digitata al terminale Risposta del server Digitata al terminale Risposta del server Digitata al terminale prompt > netstat a grep 9877 Tcp localhost.52 localhost.9877 TIME_WAIT Tcp *.9877 *.* LISTEN 3!4!4 ; = /6 = /6 3 < ="? >? 6 6+:= $! +8 / / (+& & / )( "! ( K8 ( ( % ( % (+ ( $ +!( % : '3& '!!!%' " &' 4 9( %'2 3' A '* % " &'?: 5 & $ %: 9! $! % 3 & ( 3 2&'' ' 3 :'2%" % 9' %% '
19 $ $ $ * $ 8 6 4! ( 37 / /! +& ( GF /+. / & / % ( >8!+& )(. % ( / (. / / +& )( & %! " % ' % / 9 3 % '?: 4 A?3 8 ( %!( / :! / / ( (!! +8! / / :! / / ( (' +8 $+*-, % % / / &" ( ( : )(! / ( / / : / / / +& (! % 8 +& 2F / %( ( ( &" >8!+& / )(+. 9 '% ( /!/ 8 ( %!( / )( ( 9: )( % /! / / / / ( (! +8! / & & ( / )( ( 3 ( % ( ( % (+ ('$ GF "! ( / /! +& " / )( "! (!8:?; 3 = A*,-, <!:=" /69?6 = :4 6 </=!47<>=@?; =!4 = ; =!?8:6?6 <$;!?!? = =:; =:?/ /= <>;6 47; = 6 69<!:=" /69?6? /;47=!49!4 <% 4 >; :; 4 := 69? 476 " ;4 >= ; 694 := = ;% :476 </6 = = *6 $4 ="/694 =84 =@6# < <$6947=@; A 3 ; <' $
20 <? =? := ;?6+ *69<!:=" *6<!:= 39 echocli ciao ciao ^D echocli pippo pippo ^D ps PID TTY TIME CMD 77 pts/ :: cat 2284 pts/2 :: bash 2762 pts/3 :: ssh 37 pts/6 :: bash 333 pts/ :: bash 376 pts/ :: echosrv 3765 pts/ :: echosrv <defunct> 3767 pts/ :: echosrv <defunct> 3768 pts/6 :: ps Il client viene ucciso Il client viene ucciso =8:?; ;? void sig_child(int signo) { pid_t pid; int stat; while ( pid = waitpid(-,&stat,wnohang)) > ) { printf( Child %d terminated\n,pid);!?;$= =84 =@6 =@?=" =? =@;<>; ; ;!= := Prompt > echoserver & [2] 9287 prompt > echoclient Ciao server Ciao server ^D Child 9293 terminated accept error: interrupted system call
21 ; 3? 474 ;" 4 83(6% + 3? ;?=/= ; 69<>; <>=. < =";<? >47= =@;<>; ;"/69?6 >=@? ; 47=9?6 ;?; :6/=!:= /6 *=@6?/ 42 for ( ; ; ) { clilen = sizeof(cliaddr); if ( (connfd = accept(listenfd, &cliaddr, &clilen)) < ) { if (errno = EINTR) continue; else { perror( accept error ); exit(); ;< =8 ="? >47= =@;<>; ="? #?/ " <% :=@6/= =@;<>;% = $
22 + < 69?? /=69? >; < 43,; 6?? :=? ; 8 % :, 3, < ="? :="? + % 3 4!49 =@;<>;>; < 8A 5 (/( :<5 + % 8 7 A'6/; < >= 4 4 % 47<>=?;< *=69? 4!4!4 <$=@?;% :4 <$; 47;!<? 44 Prompt > echoclient Ciao Ciao Il server viene ucciso Arrivederci Il server non risponde (dipende dal codice) = =/6 <47=" 694?8:69?6 = /=, 9 '% ( /!/ 3 < ="? :=" 474 =!4 = ;!4!4 %! ( % +& / / ( & +& ( / (. =@;< >47= 6947?; < ="? ;$4 ; 4 =? +( % %- 8 % / ( (
23 A,,,, A'6/; < >= =!? 47= >? /6 3 = =@8:?6947;! % 4 ; 4 =? ( % &* % 9( / (! %& %! (! ' 3',!& D ="? >8?!47; 6? 8:?; := 3 = 3 3*3 8 / % ( ( / / (! " ( ( ( ( 3 = $=@8:?6947; ; *=@69? := 4 = >8!? 47;! %:= 83 3*3 8 6 =@69?!< 4 =" ;!? :6?69?/= 4!;!8=@4 ;! &' ( %" &'2''3 %$ 4 4 ( /! / % 4 3'4 4' * ( ( / / / 6 ( + / /! /! (9 ( %$ ( % ;( 45 ; =?;% 4 4?69? 47;8:8:=?8:=!:= 7=!4 /6:; =" 4 >= :4 6 </6 4 4 #=? ;</6!?8:69?6 := = 3( /+ % $ 3 :="? 4 :; ;$4 5 :; ;$<>;< =@?;%!4!4 46 8&% ;'% 8-, 5 % ; (*+48 A*, 98!( 8&% ;.(*+ 8 A*,
24 6!4!49 :6?B;!? 4 <!: ('69? 69<?="; *=69? 47;? 6 " 8:; 6+:; ;4 $; 47=@<!?? 6 :6? # 4 4 = :=" 3( $ 3 4!4?69? ;%:= B= /6 ;< 4 %+A 3.47=" :69? >;!=; = 6:?? + % + ; 4 =?/ $4 = 6947?; 8A 5 (*(/+48 8&%!4!4 /6<><>; 48 void server_somma(int sockfd) { int i, arg, arg2; ssize_t n; char sendline[maxline], rcvline[maxline]; char c; for ( ; ; ) { if ( (n = reti_readline(sockfd, rcvline, MAXLINE)) == ) return; /* connection closed by other end */ /* legge dalla stringa passata dal client i due interi da sommare */ if( sscanf(rcvline, "%d %d", &arg, &arg2) == 2 ) /* converte il risultato in stringa e lo scrive nel buffer */ sprintf(sendline, "%d\n", arg + arg2); else sprintf(sendline, "input error\n"); n = strlen(sendline); reti_writen(sockfd, sendline, n); sommasrv.c
25 ; A ="? /69<><$; 49 39; 39; ==@?&;4747= 6; /6 =:=@8:= =;? $;" ; ;< = 47; 3 5 < ="4 =?8 /69<$<>;<< =' 35476!4 <>; 5 sunos5 > sommacli ;?; :;!4% ; 4 ; 3? bsdi > sommacli
26 ; PRATICA - Lezione 3! " # $ &%' ( "*)+,.-/ * "* )+ 2 ; PRATICA (Lez. 3) %+4 ; : ="? 6 ; ; 6?? </=@69? ; =:;!:=? *; 69??/ </=@69? =?:;< =:;!:= 7/( ( ( 3
27 6 '? =/6 53 PRATICA (Lez. 3) % = :=" ;>=@?!47;< *=69? 4 = : ; 7 3 socket() bind() CLIENT " # socket() sendto() recvfrom() recvfrom() " # sendto() SERVER close() close() :=4 >47=!4 :; 4? 4 =@? <. /6 =? < 4769< # =@? 69= =? =? /6 ; /:4 /6/? 4? $ =?? 6# =@? 69? 69= =? = 69? /6;<:4 /6/? ; 694 :=947= 6947?6 &2! !.? ;8:47;<><>= 54 PRATICA (Lez. 3)? $ 4 =96 4 = = 5 / (. % ( " ( / / " / / " & '& & ; : $ ( +& ( / & ( & (+( % ( /! & " / ( +. ) / ''* " (! % / / &*# % & ( ' 2 &'* #!%%! 3 ' 9 3 '*% $ / / / %! %
28 ?; PRATICA (Lez. 3) int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr, cliaddr; if( (sockfd = socket(af_inet, SOCK_DGRAM, )) < ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(port); echoudpsrv.c if( bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < ) err_sys("bind error"); server_echo_udp(sockfd, (struct sockaddr *) &cliaddr, sizeof(cliaddr)); void server_echo_udp(int sockfd, struct sockaddr *p_cliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[maxline]; for ( ; ; ) { len = clilen; if( (n = recvfrom(sockfd, mesg, MAXLINE,, p_cliaddr, &len)) < ) err_sys("recvfrom error"); if( sendto(sockfd, mesg, n,, p_cliaddr, len)!= n ) err_sys("sendto error"); A =!? 6 69? ; 7 3 # & $ 56 PRATICA (Lez. 3) #include #include "basic.h" "echo.h" echoudpcli.c int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; if (argc!= 2) err_quit("usage: udpclient <IPaddress>"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); inet_pton(af_inet, argv[], &servaddr.sin_addr); if( (sockfd = socket(af_inet, SOCK_DGRAM, )) < ) err_sys("socket error"); client_echo_udp(stdin, sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); exit();
29 , ; A =!? 6 69? ; 7 3 # $ 57 PRATICA (Lez. 3) void client_echo_udp(file *fp, int sockfd, const struct sockaddr *p_servaddr, socklen_t servlen) { int n; char sendline[maxline], recvline[maxline + ]; char buff[maxline]; socklen_t len; struct sockaddr *p_replyaddr; p_replyaddr = malloc(servlen); while (fgets(sendline, MAXLINE, fp)!= NULL) { sendto(sockfd, sendline, strlen(sendline),, p_servaddr, servlen); len = servlen; if( (n = recvfrom(sockfd, recvline, MAXLINE,, p_replyaddr, &len)) < ) err_sys("recvfrom error"); if( (len!= servlen) memcmp(p_servaddr, p_replyaddr, len)!= ) { struct sockaddr_in *sin = (struct sockaddr_in *) p_replyaddr; err_msg("risposta da %s ignorata\n", inet_ntop(af_inet, &sin->sin_addr, buff, sizeof(buff))); continue; recvline[n] = ; fputs(recvline, stdout); A'69? <>=!? 58 PRATICA (Lez. 3) %+; ; ;8:47;!< ;4!! >=? 47= :6 ;% 4!4 4 :47; 6 69<%? ; ;4 >; 4 ;4?; /= ; *=@69? 8?!4 /= 6 $= 6:= := <:= 4:84' %! " ( % ( %,3,
30 ; = ; 7; ;!8:4 ;!<$<>= 4 59 PRATICA (Lez. 3) 3!49 < < :=6?B476!4 6! ; =@; 3? ;?=;</=9?69?!;< ('69?/;<:=;!<>6 $=< /;!8:8:=6 < ="??69? ><>;= ;474 = ; 6 ;!4!4 6 4 ;$47=":6 ; 94!4?69? >;4 47= ; ;$;< =? 3? ;?=;</=# ' 47;? /; *=@6?=!:;!?/ ;!47= <$ ;< 6 :=" 4? *; A'69?? %; PRATICA (Lez. 3) 6 6 ; ?? /6 ; 7 3?69? 69??/ </6
31 , $ = 6 ; 7 326?? </6 6 PRATICA (Lez. 3) ('69?/= /;%? 6 <>; 47= >6? 39; = 474 ;!?6 ; 69<>; =;<? ; =? :=@47= 6 = =; 6? ; =;!<$; % := ;$;%69??/ < ('69?/= /;$4 4 6< <>;%/= /;4!;<B6 4 ; A'= =@<$= ;?!4!49; 7 3 ; 69<?= ;!4 69?? /6 6 < ="? ;?/6 ; 7 3?69? 69??/ </6?69? 69?! =9; /=@? 4769?= 476 " ;4 69?? 62 PRATICA (Lez. 3) ;<!:= ;4 =@? :=@47=" *6+ 69? =/= 6 6<?=" ;!4 7= 69?? 4 >= /6 # =" =";? :6 4;.( 38 A 69< % ;<>=@84 =@; := : =9? ;< :6/=@? 4 ;<>=.$ / 6 / ( " ( ( %, % (,, -* ( :
32 , * * ; ; 7 3 < =? (!4 /=69? /69?? 63 PRATICA (Lez. 3) void client_echo_udp_conn(file *fp, int sockfd, const struct sockaddr *p_servaddr, socklen_t servlen) { int n; char sendline[maxline], recvline[maxline + ]; if( connect(sockfd, (struct sockaddr *) p_servaddr, servlen) < ) err_sys("connect error"); while (fgets(sendline, MAXLINE, fp)!= NULL) { write(sockfd, sendline, strlen(sendline)); n = read(sockfd, recvline, MAXLINE); recvline[n] = ; /* null terminate */ fputs(recvline, stdout); echoudpcli-connect.c 3?; =:;!:= = :=; PRATICA (Lez. 3) 3 4!4 47= :; ;!8:4 ;< < 4 = <%? * $? = 69? (( ( G6 >6 " ( / +& % / % 98 ( ( :="?!4 =" := :; = 4!? *; ; 3 ; < ="? ; ;4?;$47=:6
33 ; !49 6? # & $ 65 PRATICA (Lez. 3) #include #include "basic.h" "echo.h" echoudpcli-count.c void server_echo_udp_count(int sockfd, struct sockaddr *p_cliaddr, socklen_t clilen); static void gestisci_interrupt(int signo); int count = ; int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr, cliaddr; if( (sockfd = socket(af_inet, SOCK_DGRAM, )) < ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(port); if( bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < ) err_sys("bind error"); signal(sigint, gestisci_interrupt); server_echo_udp_count(sockfd, (struct sockaddr *) &cliaddr, sizeof(cliaddr)); ; !49 6? # $ 66 PRATICA (Lez. 3) void server_echo_udp_count(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[maxline]; n = 24 * 24; setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)); for ( ; ; ) { len = clilen; recvfrom(sockfd, mesg, MAXLINE,, pcliaddr, &len); count++; sleep(); /* rallentiamo il server */ static void gestisci_interrupt(int signo) { printf("\ndatagrams ricevuti: %d\n", count); exit();
34 = ; < ="? 6? 67 PRATICA (Lez. 3) #define NDG 2 /* #datagrams to send */ #define DGLEN 4 /* length of each datagram */ echoudpcli-count.c void client_echo_udp_count(file *fp, int sockfd, const struct sockaddr *pservaddr, socklen_t servlen) { int i; char sendline[maxline]; for (i = ; i < NDG; i++) { sendto(sockfd, sendline, DGLEN,, pservaddr, servlen); A';<!:=;%/6 6 ;%?/ =@69?/ :=" $=:; ;8:4 ;!< =?6?!8:?; ; 68 PRATICA (Lez. 3) robdep@zircone:~/corsi/reti/c> netstat -s grep -C4 "Udp" tail -5; Udp: 6686 packets received 22 packets to unknown port received packet receive errors 8634 packets sent robdep@zircone:~/corsi/reti/c> echoudpsrv-count Client in un altra shell; dopo un pòctrl-c Datagrams ricevuti: robdep@zircone:~/corsi/reti/c> netstat -s grep -C4 "Udp" tail -5; Udp: 726 packets received 22 packets to unknown port received. 54 packet receive errors 2634 packets sent robdep@zircone:~/corsi/reti/c> echoudpcli-count robdep@zircone:~/corsi/reti/c>
35 $ PRATICA - Lezione 4! " # $ &%' ( "*)+,.-/ * "* ) !4 <>; 7 ;? :;!4B=@? # 8:8!4 :; ; ;?/6 # 8:8!4 :; /6 ('69? :6 =!47;$ ;!8:8 4 >= 3(* /6 3 :47=@<>6 :476 ; = =!?/ 6
36 ;47=9<>6 =:=3? &' 4' / (. ' +( / (. 4' / % / GF 4' 4 (9 / ( ( 5 6 =:=3 5 sincroni 7 =@? 4769?6 = :476 </6/=!4 6; # ;? :6 =@;< ; 6 47;< =@69? := 4 ; $) =@?6 ;" ; 69? < /=69? 6!47;< *=69? 3??;$6 47; *=69? := 4 ; ;? ;?; %:=3 5 :6/=;!<$6:= =?8!4 ; /= &' 4' % " % /+. / * ( % " /+.! / / %"( (+& / : 6 =@? applicazione kernel Recvfrom System call Non ci sono datagram pronti FASE : attesa BLOCCATA datagram pronto Copia datagram FASE 2: copia Processo continua (elabora il datagram) Ritorna OK Copia completata
37 (69?!4 6 =@? applicazione kernel Recvfrom System call Non ci sono datagram pronti Recvfrom Recvfrom EWOULDBLOCK EWOULDBLOCK System call System call datagram pronto FASE : attesa Copia datagram BLOCCATA FASE 2: copia Processo continua (elabora il datagram) Ritorna OK Copia completata 3 5 < ="4 =@?8 74 applicazione kernel select System call Non ci sono datagram pronti BLOCCATA Recvfrom Ritorna pronto System call datagram pronto Copia datagram FASE : attesa BLOCCATA FASE 2: copia Processo continua (elabora il datagram) Ritorna OK Copia completata
38 3 5 8 =:; 6;= 8:?; = 75 applicazione signal System call kernel Non ci sono datagram pronti FASE : attesa GESTORE SEGNALE Recvfrom SEGNALE System call datagram pronto Copia datagram BLOCCATA FASE 2: copia Processo continua (elabora il datagram) Ritorna OK Copia completata 3 5 ; /=@? 4769?6 76 applicazione aio_read System call kernel Non ci sono datagram pronti FASE : attesa datagram pronto Copia datagram FASE 2: copia GESTORE SEGNALE Processo continua (elabora il datagram) SEGNALE Copia completata
39 A A A? *=@6?/ % 77! / / #" &! / " & / #$!4 5 ( / / ( ( (-" ( # (!) ( " ( % (! ( / / ( / ( 35;!47;< 47= %+=@<!6 &', ( / / ( % & '( $ ( +& 4' ( 9: % ( (+( ( " '( ( & ( % ( / '( % ( ( & ( ( (9 ( % ( %' % &'*% 3!& ' ' " *!3 ' ' ' '&" )*& 3'%' "!% & "#76&' ('* 4 3" $ " 3 & '"# 9! &'*: &!&' & # ' ' '+! ( " '( %! # ( '% (! %$ % (/ / ( /= 47= 6949:;%6? 4 6 ;4 * % ( % / / " 8 % ( % / " *F % (! )( & ( % ( /? 3 9('* " '3, %"2"(2 '. #'& '! ' 3' ' " ('* " ' & 78
40 A * $ $ ; = ; ' = 35;!47;< 47= 3!49 <47= 47=984 ==@? /= <>=/= /; ;% 4 47;% 4?B=@? /=!<% :=!:= ( ' 3 % 3 " $ " )&( *+-$ ( ( ' 3 $ )* $, : 9'2 *% ( ' ) ( ' 3 $ * *$, : 9'2 *% ( ' ) 3 ' 3' % $, 3! 9('*! %!% ( ' )*),; 6 ;!? <7 8% 3 8 # $ >=? < 476:= <47= 64 ==@? 4 # /64 = ;<!??& $ : <>; 6 $=? < 476 <>; /=@<$6:= 47= 6947= < = ;<? /; 79, ( % & /+. /! " ( ( " + GF / " #9$ / % ( & ( " #( 74 <47= 64 = :4 6? 8 ;!? :6 ; <?6?!. :; 8:8!4 ( / % * )( / ( % & ( " (. 3 /6 6+ = /6 =@? 47;! "G: ( ( /+ 6 ( % & ( / ( 3 /6 %? =!?=@?8 /6 69?? /=69?= 69< 4 A? =/6?6+ 6 ( % & ( / ( " ( '% & / 6 (
41 ;,, = 74 <47= 64 = :4 6? 8 3? < 476:=!. :=;< =@6:=69?="!:= $?/!!49!4? ><>;8:8:=@694 := : ( / % * )( / ( % & ( " (. 6 ( % & ( " ( / " (! % / / / / ( % ( ( 3 /6 6+ = /6 =@?47= 47;, 6 ( %! '& ( A 4? ( % & ( " ( " ( % +& / 6 ( 4747= 6:=:; = 6947=!:;? :; < 6 =!? (!4/=@69? < #& $ 82 void client_echo_select(file *fp, int sockfd) { int maxfdl; fd_set rset; char sendline[maxline], recvline[maxline]; int n; echocli-slct.c FD_ZERO(&rset); for( ; ; ) { FD_SET(fileno(fp), &rset); FD_SET(sockfd, &rset); maxfdl = MAX(fileno(fp), sockfd) + ; if( select(maxfdl, &rset, NULL, NULL, NULL) < ) err_sys("select error"); if( FD_ISSET(sockfd, &rset) ) { if ( (n = reti_readline(sockfd, recvline, MAXLINE)) < ) { if( errno == EPIPE ) { err_msg( %s [%d]: server disconnesso, FILE, LINE ); break; else err_sys("readline error");
42 < 6 =!? (!4/=@69? < #$ 83 if (n == ) err_quit( %s [%d]: server disconnesso, FILE, LINE ); fputs(recvline, stdout); if( FD_ISSET(fileno(fp), &rset) ) { if( fgets(sendline, MAXLINE, fp) == NULL) return; if( (reti_writen(sockfd, sendline, strlen(sendline))) < ) err_sys("write error"); 3 < =!? 47= >;8 :; /6 =@4 /=@; =@? ; ; =" 47;? =?/ >= 4 4!4 <=@?; ="? <:= 6? 8 5 /6 / / / ( / ( (! & / / /! ( ( ( % ( 6< ="? < 84 Data o EOF stdin socket Client TCP RST data FIN
43 6 6 ;!? ;!= 85 :="?; =?/!;%:=9=? ;47= :6 ;!4!4 /=!4 6 ;$=? ; /; C Tempo dati Tempo 4 echo S Tempo dati Tempo 5 echo Tempo 2 dati Tempo 6 echo Tempo 3 dati S C Tempo 7 echo :!; =@? 86 C Tempo d C Tempo 4 d5 d4 d3 d2 r S S C Tempo d2 d C Tempo 5 d6 d5 d4 d3 r r2 S S Tempo 2 C d3 d2 d C Tempo 6 d7 d6 r d5 r2 d4 r3 S S Tempo 3 C d4 d3 d2 d S C C Tempo 7 d8 r d7 r2 d6 r3 d5 r4 S S
44 6 ' : :6? ;% 69?? /=69? 87 A'= :6/69?6 4 ;?/ 6947; ; ==@?&;4747= 6 :=4 >= 3(*/6 6 =@??; :=@4 *=69? =@? <. /6 =? :6? #=? 6 =@? ; 694 :=4 = $ 6947?6 & % ,4;'% +47,4;'% +,4;'% < ="? ( 4/=@6?/ % :6? 88 void client_echo_shutdown(file *fp, int sockfd) { int maxfdl, stdineof; fd_set rset; char sendline[maxline], recvline[maxline]; int n; echocli-shtd.c FD_ZERO(&rset); for( ; ; ) { FD_SET(fileno(fp), &rset); FD_SET(sockfd, &rset); maxfdl = MAX(fileno(fp), sockfd) + ; if( select(maxfdl, &rset, NULL, NULL, NULL) < ) err_sys("select error"); if( FD_ISSET(sockfd, &rset) ) { if ( (n = reti_readline(sockfd, recvline, MAXLINE)) < ) { if( errno == EPIPE ) { err_msg("%s [%d]: server disconnesso", FILE, LINE ); break; else err_sys("readline error");
45 6< ="? ( 4/=@6?/ % :6? 89 if (n == ) { if( stdineof == ) return; else { err_msg("%s [%d]: server disconnesso", FILE, LINE ); exit(-); fputs(recvline, stdout); if( FD_ISSET(fileno(fp), &rset) ) { if( fgets(sendline, MAXLINE, fp) == NULL) { stdineof = ; shutdown(sockfd, SHUT_WR); FD_CLR(fileno(fp), &rset); continue; if( (reti_writen(sockfd, sendline, strlen(sendline))) < ) err_sys("write error"); 4 = < 8:8!4 :; =9=< =? 69?? /= 474 ;. 4 69? ="? = 47= 6949!=/6 = = ; =:;!4 4 # /=@; =?=@?8+ 69??/ </="$ 474 ;. < =!? 69? =!?/ $=@?!4 = >=? := ;!?6 client rset fd fd fd2 fd3 fd4 fd5 FD_SETSIZE- -
46 = 4 4 %:; = 4 =!4!4 9 :69?=@;<>6 >84 = ;!? :;4 = %/=@;?6 = 47= 6947?; 6; =?/=@; %+; >=@? 6947<>;< =@69?!4 4 < <>64 =" *; ;>=? ; 4 4 = rset fd fd fd2 fd3 fd4 fd5 " =@?= =@6 /6 6 = = =?=@?8+/6 =@? :=9= :;!47;< 476 < ; := < 4 < 4 ;!? :6? =!? 4 ; 6?/6 ; < 4 4 %:; % % ( ( &! / (! ( : = 4 =!4!4 ;!:= ="?; 6?? </=@69?!474 4 ;%6?? </=@69? 69? ;? *=@6?/ 92 client rset fd fd fd2 fd3 fd4 fd5 FD_SETSIZE- - 7=9? 6 6 =!4!49 /6 # = 47= =@;<>; < 694 $ ; 4 4!8:8 4 :; =9= ( (! ( +. ) $ /! ( 9 $ )(! ( ( / % ( GF 9 / "
47 = = 4 4 %:; :69?=@;<>6? ; 476< ="? 4 ; 6?B? 6 6/6 % % ( ( &! / (! ( : = 4 =!4!4 /= 69?? 6! client rset fd fd fd2 fd3 fd4 fd5 FD_SETSIZE- - 7=9? 6 6 =!4!49 /6 # = 47= =@;<>; < 694 $ ; 4 4!8:8 4 :; =9= ( ( ( +. - $ / ( % / )( " ( / % ( GF 9 / " :69?=@;<>6 6947; /;% $?8:; 4 4 %:; = 4 =!4!4? ; :47=<>;%69?? /=@6?/ %# " ;% = /; 94 client rset fd fd fd2 fd3 fd4 fd5 FD_SETSIZE =@;<>;% 47= 694$ ;<!4!4 8:8 4 :; =:= 6 # = ( ( ( +. 9$ / ( $ )( ( ( / % ( 2F 9 /
48 /=@6?/ % #& $ 95 int main(int argc, char **argv) { int listenfd, connfd, sockfd; int i, maxi, maxfd; int ready, client[fd_setsize]; char buff[maxline]; fd_set rset, allset; ssize_t n; struct sockaddr_in servaddr, cliaddr; socklen_t cliaddr_len; echosrv-slct.c if( (listenfd = socket(af_inet, SOCK_STREAM, )) < ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(port); if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < ) err_sys("bind error"); if( listen(listenfd, BACKLOG) < ) err_sys("listen error"); /=@6?/ % #$ 96 maxfd = listenfd; /* inzializza il numero di descrittori */ maxi = -; for ( i = ; i < FD_SETSIZE; i++) client[i] = -; /* inizializza l'array client a - */ FD_ZERO(&allset); /* inizializza a zero tutti i descrittori */ FD_SET(listenfd, &allset); /* setta il descrittore di ascolto */ for ( ; ; ) { rset = allset; /* insieme descrittori da controllare per la lettura */ if( (ready = select(maxfd+, &rset, NULL, NULL, NULL)) < ) err_sys("select error"); if( FD_ISSET(listenfd, &rset) ) { /* richiesta ricevuta dal listening socket */ cliaddr_len = sizeof(cliaddr); if( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &cliaddr_len)) < ) err_sys("accept error"); for(i = ; i < FD_SETSIZE; i++) if( client[i] < ) { /* cerca il primo posto libero per il nuovo il descrittore */ client[i] = connfd; break; if( i == FD_SETSIZE ) err_quit("troppi client"); FD_SET(connfd, &allset); /* setta connfd per la select */ if( connfd > maxfd ) maxfd = connfd; /* aggiorna maxfd */ if( i > maxi ) maxi = i; /* aggiorna maxi */ if( --ready <= ) continue; /* se non ci sono altri socket pronti riprendi da select */
49 ; /=@6?/ % # $ 97 for( i = ; i <= maxi; i++ ) { /* controlla tutti i socket attivi per controllare se sono leggibili */ if( (sockfd = client[i]) < ) continue; if ( FD_ISSET(sockfd, &rset) ) { /* se sockfd è leggibile invoca la readline */ if ( (n = reti_readline(sockfd, buff, MAXLINE)) == ) { /* connessione chiusa dall'altro endpoint */ close(sockfd); /* rimuovi sockfd dalla lista di socket che la select deve controllare */ FD_CLR(sockfd, &allset); client[i] = -; /* cancella sockfd da client */ else reti_writen(sockfd, buff, n); if ( --ready <= ) break; 74?=;6 4 = ; 98 ;? =!? /= 69??/ :="?/6 6!. #?69?/=@;?B? =@? $- >?69? ;%:=? ; 3 4!49 =@;<>;$4!;<4 =? 8:8!4 = /=@?8:6 6!. <>; /=!4 6 4? ;4 6/=@<>; =;!<>; ;>;4 9;< =? /; :=?B? =@? 3 4!4!4 6 ; 6 $? <?B; 476< ="? 47= 4 =!4 =" *=@6 ;? =!? 4 =" >; ;4 =:<$6:6 47= :6?/:; := ;<B; 47=< =? $=!4!4?69?
50 ; 74?=;6 4 = ; !! >;? ;4!? $=!4!49 >8 < /6 6< =!? =@4? ;>/;4?/=@?8:6 6 :476 / :?=< ="? = =" *;4? =< 6 " >6 47;< =@69?=:=3 5 ;>/;4 %3 5?69?!4 6 =? 8 8!4=" *= = < =!? 3 < ="? /= 69?? /=:="6??
51 PRATICA - Lezione 5! " # $ &%' ( "*)+,.-/ * "* ) =69? 2 PRATICA (Lez. 5),;? *=@6?/ %? < 4 /; ;% 69?B=/6? >6 =@69?=/69?6!:=?;47= # 69?B6 6 $ 4 ;!??6? ; 64 %#=@? 6 ;? 4 69< 4 <$ 4 :=
52 ??? 3 3 B 3 5 D. H ?,= " = 3 PRATICA (Lez. 5) 5, 5 A 8% = " 6/6 % 5 % 5 ; % 5 A % : = " : = " !4/=@69?/ 33: = " < </;!8:8:=:= 69? :3 + 5 %+A = " 6)%+A Livello: SOL_SOCKET Livello: IPPROTO_IP Livello: IPPROTO_TCP 5 =@69?= 4 PRATICA (Lez. 5) 3 &* $, 3'! 3 HGD ACB &A, # ' &! '!!," 3 B 8H 3! ''+ " 2 9(' :'" 3 >D 8 3''3# 3 8+D 4 D ' ' ' % ' $ A? ' ' " %" 3 '%% ' 3?: 8+D (! % %,"# ' 3 D (! % %,"#; 6%! ' 3 IBCH 3 ',"#! 23 ' 3 D 3 A ',"#! %! ' 3 IB A 3 & '" 3 ' 3 D >? 3 & '"! ' 3 IB I? &* $ 3 "# % '* ( % ' 3 D 8 8 ACBCB>D 5+3 &* $ 3 "# % '2' ' 3 D 8 8 D % '*!%' 3 GE %' 3'" ' $! 8 H A 5! " '*'2! 5 3 B>D 5?3 ' % '!! 5 I? && ' &'2 3!%& ' A? &'*&* &'2 3 : & %% ' 5 A ÏD 7( &"& &! 5 A 8, ' &'2! B 8 A E
53 , $ $ ;,, 8 /6 6 % /6 6 5 PRATICA (Lez. 5) / ( / ( ( (! (.!" &3 (+. %!$! ( (+. / (. %#$!!4 )(./!/ ( / ( ( (-" ( $# * (+. ( %#$ / 6 ( % & (. % / " & '( $ ( ( %!! / ( " (! ( %/ (./ & * (. ( %#$ / & ( ( / '& & ( & / # / 6 ( % & ( 9: / ( % % )(9 # / 6 ( % & ( 9: / 5 -:'+5 7A % 6 PRATICA (Lez. 5) 8 '? :47698:47;<>< ;%:4 9? >=? =?/ =@? :=@47= *6+:= < =@?; *=@6?/,!? :6 4 <!! >=@?!4 =@4? =? :=@47= 6:=!:4769; ; 3 :47698:4 ;!<><$; :6 4!! 69? 476 " ;4? 6 *=@69? %:=/;!:= = ;$=!:4 69;< ;?6? ="? ; 6+ 69<?! ( ( / 6 ( % * *!
54 $ * 6, * $ 6 $ ; PRATICA (Lez. 5) >= :476 /6 >=??;% =@;<>; ;>;% < /= ; 4 ; 4 ; % 4 ;% 47= 4 ; 47= 64?; 69?B= 4 = 694 :4769? 6 ;<+ 4? /= ; /;?/: =":; 6;!=!8:?; = 3 = 3 5 ="? >8?!47;, =@? = 64?; 6 >= ; 694 :=/6 4! , PRATICA (Lez. 5) A %:=947=" :6 ; + % ; ; = 5 8 ; = 9 ; 69??/ </=@69? >;!? 6947;>; = ; :=947= :6 ;> 6?? /=69?!4 ;% ="? >8?!47; 6* ?8A (/(*+ 8&% /; ('69? >47=" :6 < </;!8:8:=698:?=!?8:69?6 := + 69? :=!47=@6947= " % ( ( % ()" " " )( ( / 6 ( % 37, + ( / /! ( / 6 ( 7,*
55 * ; $ = $ 6 5 -, 3( = 8-+ =" =";=? *=@69?;<? 6 ;%< 6 4 : ="? =9; ;%69??/ </=@6!?/ %#% A 3 $ 9 PRATICA (Lez. 5) 6 6 = 4 3" : " " # ' '; ' ' ' # &*'* $ 6 ' 69?6 : / ( ( /+. / %! / 69?6 -- =?8 4 : : )( ( ( %! / +8 +& / '& ( / / ( ( 69?6 --! =?8 4 : : / ( ( (! ( %! // ( & : ( % % ( (!( / / / / ( ( ( % +& ( % ( // " )( ( (! / / 5 +A : ; 5 (>7-:<; PRATICA (Lez. 5) A'69? % A 3 9 6; *=6:=" :69?=!:= 6!!4 = = ;? " ; =?/ < 47;%:= % A 3 =? :=9?69? :6 4 <!! 4 = 6!4 6 A'69?; 7 3!? ; = :; =9=? 6!4 6?8:69?6 ;?/ ;
56 ; 6 5 +:A, 5 % 5 (979, 5 Autunno % 23 PRATICA (Lez. 5) 3!44%+A 3 %; 7 3 = < ;?& 3 ; : 5 +:A % (97 % 3 8 Autunno PRATICA (Lez. 5) / / ( ( / ( ( )( + ; 4!;< < 4 < /8 47= 47=?? %+=@<!6 :=/;!:= = 6 =@? := ;? *=69? /=!4 6 ;
57 ; 5 %$ PRATICA (Lez. 5) 5 A % A -7 = + 5 *=69?=:=33 4 PRATICA (Lez. 5) ; 4? 47; /6 :=33 ; 694 ; ; 4 ="; *=69? 6 4 =4 $;!?? 33!;< 94?6947<>; <!? 47= 6+:; 47? 3!4 <% :=9=?/!47=@4? >6 *=69?= " 3*3 ; 4 3!4 <% % % 6 3 ; := <=" =" ;!4 >= =<,= #=? :; ;8:4 ;< 6$
58 ,,, 5 *=@69?=:= % A 3 %+A , 3 8 (+ / ( 5 PRATICA (Lez. 5) %+A % " % % # / " / # %! $ ( %" " ( / ( (! %+A 3-8 = (+ / / ( " / / 6 "9 / / ( ( %+A 3 ( 5 7-8, 5 3 / / 6 / ( ( / +& " % ( ( ( 8!< :=@6:= >8 /6 6 6 PRATICA (Lez. 5) #include "basic.h" #include <netinet/tcp.h> int main(int argc, char **argv) { int sockfd, mss, sendbuff, ttl; socklen_t optlen; sockopts-set.c if( (sockfd = socket(af_inet, SOCK_STREAM, )) < ) err_sys("socket error"); optlen = sizeof(ttl); if( getsockopt(sockfd, IPPROTO_IP, IP_TTL, &ttl, &optlen) == - ) err_ret("getsockopt error"); printf("getsockopt: TTL = %d\n", ttl); ttl = ttl + 6; if( setsockopt(sockfd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)) == - ) err_ret("getsockopt error"); printf("ttl modificato\n", ttl); if( getsockopt(sockfd, IPPROTO_IP, IP_TTL, &ttl, &optlen) == - ) err_ret("getsockopt error"); printf("getsockopt: TTL = %d\n", ttl); exit();
SERVER CLIENT. Letteralmente significa presa (di corrente) È l astrazione di un canale di comunicazione fra due computer connessi da una rete
Socket 02.2 Letteralmente significa presa (di corrente) È l astrazione di un canale di comunicazione fra due computer connessi da una rete -02: Socket TCP Autunno 2002 Prof. Roberto De Prisco Sono definiti
DettagliP3-04: I/O multiplexing
Autunno 2002 Prof. Roberto De Prisco -04: I/O multiplexing Università degli studi di alerno Laurea e Diploma in Informatica Problema 04.2 Un programma deve gestire due input simultaneamente tandard input
DettagliSERVER CLIENT. Struttura di un Applicazione UDP. Socket UDP. Parametri di sendto. Funzioni di Input/Output. Prof. Vincenzo Auletta
I semestre 03/04 Struttura di un Applicazione UDP Socket UDP socket() bind() Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ CLIENT socket() sendto() Dati (richiesta)
DettagliLaboratorio di Reti di Calcolatori
Laboratorio di Reti di Calcolatori Socket UDP. Paolo D Arco Abstract Scopo della lezione è descrivere le funzioni che l interfaccia dei socket offre per far interagire client e server attraverso il protocollo
DettagliLaboratorio di Reti di Calcolatori
Laboratorio di Reti di Calcolatori Funzioni utili, server ricorsivi, echo client ed echo server. Paolo D Arco Abstract Scopo della lezione è presentare alcune funzioni di utilità generale (e.g., funzioni
DettagliCorso di laurea in Informatica. Reti di Calcolatori A.A. 2007-2008. Prof. Roberto De Prisco LABORATORIO. Lezione
Corso di laurea in Informatica Reti di Calcolatori A.A. 2007-2008 Prof. Roberto De Prisco Lezione 1 Obiettivo 2 Saper scrivere semplici programmi per la comunicazione su una rete di calcolatori Assunzione
DettagliFunzioni bloccanti e soluzioni
Funzioni bloccanti e soluzioni La funzione accept() e le funzioni per la gestione dell I/O (ad es., read() e write()) sono bloccanti Ad es., le funzioni read() e recv() rimangono in attesa finché non vi
Dettaglifunzione fork() La funzione fork è usata per duplicare un processo. #include <unistd.h> pid_t fork (void);
La funzione fork è usata per duplicare un processo. #include pid_t fork (void); funzione fork() restituisce -1 in caso di errore. Se tutto va a buon fine restituisce 0 nel processo figlio ed
DettagliFunzioni bloccanti e soluzioni. Funzioni bloccanti e soluzioni (2) Parametri della funzione select() Funzione select()
Funzioni bloccanti e soluzioni La funzione accept() e le funzioni per la gestione dell I/O (ad es., read() e write()) sono bloccanti Ad es., le funzioni read() e recv() rimangono in attesa finché non vi
DettagliProblema. I/O Multiplexing. Struttura delle Operazioni di Lettura. Modelli di I/O. Prof. Vincenzo Auletta
a.a. 2003/04 Problema I/O Multiplexing Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in Informatica 1 Un applicazione
DettagliProgettazione di un client TCP. Progettazione di un server TCP. Esempio: daytime TCP. Client TCP daytime
Progettazione di un client TCP Progettazione di un server TCP Passi per la progettazione di un client TCP 1. Creazione di un endpoint Richiesta al sistema operativo 2. Creazione della connessione Implementazione
DettagliServer Iterativi. Server TCP Ricorsivi. Fork. Server Ricorsivi. un server iterativo gestisce una connessione alla volta. Prof.
Università degli studi di Salerno Laurea in Informatica a.a. 2003/04 TCP Ricorsivi Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ 1 Iterativi un server iterativo
DettagliSviluppo di Applicazioni su Rete. Introduzione all API socket di Berkeley. Interazione tra Processi. Modello Client-Server
a.a. 2003/04 Introduzione all API socket di Berkeley Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica
Dettaglirequest reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A.
Applicazioni di rete Forniscono i servizi di alto livello utilizzati dagli utenti Determinano la percezione di qualità del servizio (QoS) che gli utenti hanno della rete sottostante Programmazione di applicazioni
DettagliProgettazione di Applicazioni Robuste. Applicazione Echo. Schema Generale di un Server TCP Ricorsivo 1. Applicazione echo
a.a. 2003/04 Applicazione Echo Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Progettazione di Applicazioni Robuste nel progettare applicazioni su rete robuste
DettagliLaboratorio di Reti di Calcolatori
Laboratorio di Reti di Calcolatori I/O Multiplexing. Paolo D Arco Abstract copo della lezione è presentare i vari modelli di I/O, descrivere la funzione select(), e costruire un echo client robusto ed
DettagliInterazione con il DNS Conversioni di Nomi ed Indirizzi
a.a. 2003/04 Interazione con il DNS Conversioni di Nomi ed Indirizzi Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in
Dettaglifunzione close() La funzione close è utilizzata normalmente per chiudere un descrittore di file, è utilizzata per chiudere un socket e terminare una
funzione close() La funzione close è utilizzata normalmente per chiudere un descrittore di file, è utilizzata per chiudere un socket e terminare una connessione TCP. int close (int socketfd); restituisce
DettagliSocket II MIDLAB. Sirio Scipioni. M I D L A B.
Socket II Sirio Scipioni scipioni@dis.uniroma1.it http://www.dis.uniroma1.it/~scipioni MIDLAB http://www.dis.uniroma1.it/~midlab Sommario Richiami sui processi Echo server TCP (multi processo) Richiami
Dettagli*HVWLRQHDYDQ]DWDGHOOH6RFNHWLQ& ODSULPLWLYDVHOHFW
*HVWLRQHDYDQ]DWDGHOOH6RFNHWLQ& ODSULPLWLYDVHOHFW 7&3H8'3&OLHQW6HUYHUXVDQGRVHOHFW Si progetti un applicazione distribuita Client/Server per una rete di workstation UNIX (BSD oppure System V). In particolare,
DettagliProgrammazione di applicazioni di rete con socket - parte 1
Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Programmazione di applicazioni di rete con socket - parte 1 Corso di Sistemi Distribuiti Valeria Cardellini Anno accademico 2008/09 Applicazioni
DettagliLaboratorio di Reti di Calcolatori
Laboratorio di Reti di Calcolatori Comunicazione tra processi in una interrete, Socket API. Paolo D Arco Abstract Scopo della lezione è spiegare concisamente come possono comunicare due processi in esecuzione
DettagliEsempi di Client e Server
Esempi di Client e Server Corso di laurea in Informatica Laboratorio di Reti di Calcolatori A.A. 0-0 Simone Bassis bassis@di.unimi.it #include #include #include #include
DettagliProgrammazione socket. Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.
Programmazione socket Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.5 Italia Applicazioni di rete Realizzare un'applicazione di rete
DettagliTimeout. Socket Avanzati. Funzione alarm() Client echo UDP con alarm
I semestre 02/03 Socket Avanzati Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Timeout Abbiamo visto
DettagliSocket TCP. prima parte
Socket TCP prima parte Cosa cambia: socket int fd = socket(pf_inet, SOCK_STREAM, 0); if (fd
DettagliSocket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.
Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento
DettagliSocket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.
Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento
DettagliEsempio 1: stampa locale di file remoto
Alcuni esempi di uso di Socket Esempio 1: stampa locale di file remoto Visualizzazione locale del contenuto di un file remoto. Il client deve richiedere la creazione della connessione e successivamente
DettagliEsercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012. - Comunicazione Tra Processi (IPC) - - 2 Parte -
Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012 - Comunicazione Tra Processi (IPC) - - 2 Parte - 1 Sommario Comunicazione tra processi su macchine diverse in rete: Socket TCP o Socket Stream
DettagliSocket I MIDLAB. Sirio Scipioni. M I D L A B
scipioni@dis.uniroma1.it http://www.dis.uniroma1.it/~scipioni MIDLAB http://www.dis.uniroma1.it/~midlab Sommario Strutture dati Funzioni Echo client/server Echo server TCP Echo client TCP Echo server UDP
DettagliScrittura dei programmi applicativi di rete
Scrittura dei programmi applicativi di rete Contenuti del corso La progettazione delle reti Il routing nelle reti IP Il collegamento agli Internet Service Provider e problematiche di sicurezza Analisi
DettagliTimeout. Socket Avanzati. Client echo UDP con alarm. Funzione alarm()
Università degli studi di Salerno Laurea in Informatica a.a. 2003/04 Socket Avanzati Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ 1 Timeout Abbiamo visto molte
DettagliSocket per TCP: Fondamenti
Socket per TCP: Fondamenti Network Applications Molte applicazioni di rete sono formate da due programmi distinti (che lavorano su due diversi host) uno detto server ed uno detto client. Il server si mette
DettagliEsercitazione sulle Socket
Esercitazione sulle Socket Sommario Echo Server Specifica Descrizione programma (TCP Socket) Client UNIX/WIN Server UNIX/WIN Server multithread UNIX/WIN Descrizione programma (UDP Socket) 2 Interazione
DettagliParametri valore-risultatorisultato
Formato dei dati Programmazione di applicazioni di rete con socket - parte 2 La comunicazione deve tener conto della diversa rappresentazione dei dati Rappresentazione in Big Endian e Little Endian Soluzione
DettagliInterazione (TCP) Client-Server con le socket
Interazione (TCP) Client-Server con le socket D. Gendarmi Interazione TCP Client/Server Server 2. Assegnare un local address alla socket 3. Settare la socket all ascolto 4. Iterativamente: a. Accettare
DettagliProgrammazione di applicazioni di rete con socket - parte 2
Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Programmazione di applicazioni di rete con socket - parte 2 Corso di Sistemi Distribuiti Valeria Cardellini Anno accademico 2008/09 Formato
DettagliSocket TCP. seconda parte
Socket TCP seconda parte Schema della connessione Computer 1 127.43.18.1 indirizzo I1 indirizzo I2 Computer 2 143.225.5.3 porta 45000 socket porta 5200 socket processo client processo server socket(...)
DettagliSC per Inter Process Comminication. Comunicazione fra macchine diverse: socket
SC per Inter Process Comminication Comunicazione fra macchine diverse: socket 1 Sockets File speciali utilizzati per connettere due o più processi con un canale di comunicazione i processi possono risiedere
DettagliAcknowledgment: Prof Vincenzo Auletta, Università di Salerno. Approfondimento alla programmazione distribuita
Reti Informatiche Approfondimento alla programmazione distribuita Acknowledgment: Prof Vincenzo Auletta, Università di Salerno Introduzione API send e receive bloccanti e non API select Socket UDP Esempio
DettagliCOMUNICAZIONE TRA PROCESSI REMOTI IN UNIX
A cura del prof. Gino Tombolini 1 COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX Il sistema UNIX TCP/IP fornisce un meccanismo di comunicazione tra processi residenti su nodi distinti di una rete, compatibili
DettagliSocket per TCP: Fondamenti
Socket per TCP: Fondamenti Network Applications Molte applicazioni di rete sono formate da due programmi distinti (che lavorano su due diversi host) uno detto server ed uno detto client. Il server si mette
DettagliCreare un'elementare backdoor in C in ambiente UNIX
Creare un'elementare backdoor in C in ambiente UNIX DISCLAIMER: Questo tutorial è a solo scopo didattico. L'autore NON si prende alcuna responsabilità circa usi errati o non legali delle informazioni qui
DettagliIntroduzione ai socket
Introduzione ai socket Socket locali Contiene lucidi tratti da: 2006-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), 2004-2005 Walter Crescenzi(Universita di Roma
DettagliINGEGNERIA DEL WEB. VinX
INGEGNERIA DEL WEB VinX Indice 1 Programmazione di applicazioni di rete 1 1.1 Applicazioni di rete........................................ 1 1.2 Modello Client/Server......................................
DettagliLaboratorio di Reti di Calcolatori
Laboratorio di Reti di Calcolatori Esecuzione client-server: analisi e gestione degli errori. Paolo D Arco Abstract Scopo della lezione è mostrare come analizzare l esecuzione di un client ed un server,
DettagliUna semplice applicazione client/server 1
Una semplice applicazione client/server 1 Il nostro obiettivo In questa parte del corso implementeremo un applicazione client/server che usa i socket Internet disponibili nei sistemi Unix/Linux. Nello
DettagliEsercitazione [6] Client/Server con Socket
Esercitazione [6] Client/Server con Socket Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di
DettagliCORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 6
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica, Elettronica e delle Telecomunicazioni a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 6 1 Socket
Dettagligetsockname() e getpeername() Formato dei dati - server Esempio getsockname() server (2)
Formato dei dati La comunicazione deve tener conto della diversa rappresentazione dei dati Rappresentazione in Big Endian e Little Endian Soluzione usata dai socket: network byte order (Big Endian) Due
Dettagli(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ&
(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ& 3ULPRHVHUFL]LR6RFNHWVWUHDPFRQULGLUH]LRQH Si progetti un applicazione distribuita Client/Server per una rete di workstation UNIX (BSD oppure System V). In particolare,
DettagliProgrammazione di applicazioni di rete
Programmazione di applicazioni di rete Valeria Cardellini Università di Roma Tor Vergata Applicazioni di rete Applicazioni di rete - forniscono i servizi di alto livello utilizzati dagli utenti - determinano
DettagliINTERNET DOMAIN SOCKETS (Cap.59)
INTERNET DOMAIN SOCKETS (Cap.59) Internet Domain Stream Socket TCP Internet Domain Datagram Socket UDP A differenza degli UDDS I datagrams possono essere persi duplicati o arrivare in un ordine diverso
DettagliIPC Inter Process Communication
Il protocollo TCP controlla che la trasmissione tra due end points avvenga correttamente. Non stabilisce alcun criterio su chi deve iniziare la comunicazione. Questo compito è svolto dalle applicazioni
DettagliInter-process communication: socket
Le Socket Inter-process communication: socket Abbiamo visti alcune tipologie di Inter-process communication: Anonymous pipes FIFOs o named pipes Le socket di comunicazione si pongono nell'ipc per realizzare:
DettagliGuida all' uso dei sockets nella programmazione in C
Guida all' uso dei sockets nella programmazione in C ( pseudo-traduzione personalizzata di "Beej's Guide to Network Programming" ) (Prima parte) INTRODUZIONE Finalmente ho trovato una guida chiara e semplice
DettagliScrittura dei programmi applicativi di rete
Nota di Copyright RETI DI CALCOLATORI Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Questo insieme di trasparenze (detto nel seguito slide) è protetto
DettagliCorso di Reti di Calcolatori T
Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 3 (svolta) Socket C senza e con connessione Luca Foschini Anno accademico 2017/2018 Esercitazione 3 1
DettagliReti (già Reti di Calcolatori )
Reti (già Reti di Calcolatori ) Cenni di Socket Programming Renato Lo Cigno http://disi.unitn.it/locigno/index.php/teaching-duties/computer-networks Socket API Programmazione dei socket Obiettivo:imparare
DettagliL uso di Socket UDP. TCP vs. UDP UDP
L uso di Socket UDP TCP TCP vs. UDP UDP 1 Interazione UDP Client/Server Server 1. Creare un socket 2. Assegnare un local address al socket 3. Iterativamente: a. Inviare e ricevere dati 4. Chiudere il socket
DettagliL interfaccia socket
L interfaccia socket Application Programming Interface: API Socket API Procedure base Altre procedure Ordinamento dei byte Interazione client-server orientata alla connessione Interazione client-server
DettagliLaboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione
Laboratorio reti AA 2008/2009 Dott. Matteo Roffilli roffilli@csr.unibo.it Ricevimento in ufficio dopo la lezione 1 Laboratorio reti AA 2008/2009 Per esercitarvi fate SSH su: alfa.csr.unibo.it si-tux00.csr.unibo.it.
DettagliLaboratorio di Sistemi Operativi 29-01-2009. Cognome Nome Mat.
Il compito è costituito da domande chiuse, domande aperte ed esercizi. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 2 ore. Domande chiuse: ogni domanda corrisponde ad un punteggio
DettagliSocket per TCP: Fondamenti
Socket per TCP: Fondamenti Network Applications Molte applicazioni di rete sono formate da due programmi distinti (che lavorano su due diversi host) uno detto server ed uno detto client. Il server si mette
DettagliUna socket è un punto estremo di un canale di comunicazione accessibile mediante un file descriptor. Alcuni tipi predefiniti di socket
Una socket è un punto estremo di un canale di comunicazione accessibile mediante un file descriptor Le socket costituiscono un fondamentale strumento di comunicazione, basato sullo scambio di messaggi,
DettagliReti di Calcolatori - Laboratorio. Lezione 5. Gennaro Oliva
Reti di Calcolatori - Laboratorio Lezione 5 Gennaro Oliva Server basato su I/O Multiplex Per realizzare un server è possibile utilizzare l'i/o Multiplex Un unico processo iterativo gestisce il socket che
DettagliInternetworking with TCP/IP (Douglas E. Comer) Vol. I and Vol III.
Internetworking with TCP/IP (Douglas E. Comer) Vol. I and Vol III http://gapil.truelite.it/ http://www.linuxdidattica.org/docs/a ltre_scuole/planck/socket/ Client Server Esistono vari modelli di architettura
DettagliEsempio 1: stampa locale di file remoto
Alcuni esempi di uso di Socket Esempio 1: stampa locale di file remoto Visualizzazione locale del contenuto di un file remoto. Il client deve richiedere la creazione della connessione e successivamente
DettagliDATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso
DATAGRAM SOCKET Angelastro Sergio Diomede Antonio Viterbo Tommaso Definizione supporta i datagram privo di connessione messaggi inaffidabili di una lunghezza massima prefissata il protocollo UDP supporta
DettagliCreare una applicazione Winsock di base
Creare una applicazione Winsock di base Usiamo le API Winsock incluse in Creare un progetto per una Socket Windows (in Dev C++) Selezionare la file New Projects Selezionare Empty Project Salvare
DettagliSocket per TCP: Fondamenti
Socket per TCP: Fondamenti Network Applications Molte applicazioni di rete sono formate da due programmi distinti (che lavorano su due diversi host) uno detto server ed uno detto client. Il server si mette
DettagliLe Opzioni per i Socket
Advanced TCP Socket Le Opzioni per i Socket Le opzioni per i socket sono controllate mediante tre tipi di primitive: 1) le funzioni getsockopt() e setsockopt(), che permettono di configurare alcune caratteristiche
DettagliCenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it
Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale
DettagliEsercitazione Laboratorio di Sistemi Operativi 20-01-2014. Cognome Nome Mat.
Il compito è costituito da domande chiuse e domande aperte. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 2 ore. Domande chiuse: ogni domanda corrisponde ad un punteggio di 1 punto
DettagliEsercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012. - Comunicazione Tra Processi (IPC)- - 1 Parte -
Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012 - Comunicazione Tra Processi (IPC)- - 1 Parte - 1 Sommario Comunicazione tra processi sulla stessa macchina: fifo (qualunque insieme di processi)
DettagliI Socket. Laboratorio Software 2008-2009 M. Grotto R. Farina
M. Grotto R. Farina Sommario 1. Applicazioni Distribuite 2. I Socket Introduzione Interfacce e protocolli Descrizione Stile di comunicazione Namespace e protocollo Include e system call Creazione e chiusura
DettagliSistemi di Elaborazione. Introduzione alla Programmazione distribuita
Sistemi di Elaborazione Introduzione alla Programmazione distribuita Obiettivi Introdurre i concetti di base su programmazione distribuita Modello Client-Server Interfaccia Socket Progettare e realizzare
DettagliServer Ricorsivii i. Dott. Delfina Malandrino.
A.A. 2007/2008 Rcorsv delmal@da.unsa.t http://ss.da.unsa.t/~delmal Dpartmento d Informatca ed Applcazon R.M. Capocell Unverstà degl Stud d Salerno Iteratv Un server teratvo gestsce una sngola connessone
Dettagliunsigned long inet_addr(cp) char *cp;
/* bcopystru.c #include struct point int x; char *y; ; struct point a, b; struct pint *pta, *ptb; a.x = 5; a.y = pippo ; b = a; printf i valori del secondo point sono: %d %s\n,b.x,b.y); pta=
Dettaglirsystem Maximiliano Marchesi maximiliano.marchesi@studenti.unipr.it
Maximiliano Marchesi 28 Settembre 2005 Diario delle Revisioni Revisione 1.2 28 Settembre 2005 maximiliano.marchesi@studenti.unipr.it Sommario Introduzione..................................................................................
DettagliI Socket di Berkeley
I Socket di Berkeley di Francesco Licandro Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università degli studi di Catania A.A. 2004-2005 1 Programmazione su rete Le applicazioni di
DettagliIPC: InterProcess Communication
IPC: InterProcess Communication Uso di segnali Uso di file processo invia limitata quantità info (solo un tipo di segnale) e manca il mittente del segnale solo tra processi che condividono un file system
DettagliOpzioni del Socket. Socket Options. Opzioni di Livello Socket. Livello delle Opzioni
a.a. 2003/04 Opzioni del Socket Socket Options Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in Informatica 1 Ogni socket
DettagliProgram m azione di Sistem a 6
Program m azione di Sistem a 6 Lucidi per il corso di Laboratorio di Sistemi Operativi tenuto da Paolo Baldan presso l'università Ca' Foscari di Venezia, anno accademico 2004/ 2005. Parte di questo materiale
DettagliReti di Calcolatori - Laboratorio. Lezione 7. Gennaro Oliva
Reti di Calcolatori - Laboratorio Lezione 7 Gennaro Oliva Opzioni di socket Ogni socket aperto ha un insieme di opzioni associate che ne determinano il comportamento Distinguiamo due tipi: opzioni binarie
DettagliIntroduzione alla programmazione C di socket
Introduzione alla programmazione C di socket (testo di riferimento : M. J. Donahoo, K. L. Calvert, TCP/IP Sockets in C: Practical Guide for Programmers. Morgan Kaufman Publishers. ) A.A. 2005/06 Una rete
Dettagliprogrammazione distribuita Introduzione Introduzione alla programmazione distribuita
Reti Informatiche Introduzione alla programmazione distribuita Introduzione Richiami di Programmazione C Differenze principali C/C++ 2 1 Definizioni di variabili Le variabili possono essere definite solo
DettagliLIBRERIA SOCKET EFUNZIONI DI NETWORKING. Versione 1.0
LIBRERIA SOCKET EFUNZIONI DI NETWORKING Versione 1.0 Vito Asta, febbraio 2000 N.B. La presente dispensa accenna solo brevemente agli argomenti trattati e alle funzioni viste nel corso delle esercitazioni;
DettagliLABORATORIO di Reti di Calcolatori
LABORATORIO di Reti di Calcolatori Socket in linguaggio C: protocollo connection-oriented 1 of 15 v slide della docente Bibliografia v testo di supporto: D. Maggiorini, Introduzione alla programmazione
DettagliI/O su Socket TCP: read()
I/O su Socket TCP: read() I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una
DettagliLaboratorio di Programmazione in Rete
Laboratorio di Programmazione in Rete a.a. 2005/2006 http://www.di.uniba.it/~lisi/courses/prog-rete/prog-rete0506.htm dott.ssa Francesca A. Lisi lisi@di.uniba.it Orario di ricevimento: mercoledì ore 10-12
DettagliCorso di Sistemi Operativi Esercitazioni
Università di Roma La Sapienza Dipartimento di Informatica e Sistemistica Corso di Sistemi Operativi Esercitazioni Lezione IX Esempio di progetto Server HTTP 0.9 Server HTTP 0.9 Specifiche Si chiede di
DettagliLa programmazione di rete
La programmazione di rete Introduzione alla programmazione di rete La connessione La trasmissione 20 febbraio 2004 Applicazioni distribuite Applicazione: un insieme di programmi coordinati per svolgere
DettagliOpzioni per le Socket
Opzioni per le Socket A.A. 2005/06 Opzioni per le Socket Ogni socket aperto ha delle proprietà che ne determinano alcuni comportamenti Le opzioni del socket consentono di modificare tali proprietà Ogni
DettagliCorso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori a.a. 2009/10
Corso di Laurea in Ingegneria Informatica Corso di Reti di Calcolatori a.a. 2009/10 Roberto Canonico (roberto.canonico@unina.it) Antonio Pescapè (pescape@unina.it) Le socket di Berkeley Le socket di Berkeley
DettagliParadigma client-server
Interazione Client Server (socket) Vittorio Maniezzo Università di Bologna Vittorio Maniezzo Università di Bologna 15 CliSer - 1/31 Paradigma client-server Le applicazioni utente devono interagire con
DettagliProgrammazione dei socket di rete in GNU/Linux
Programmazione dei socket di rete in GNU/Linux Fulvio Ferroni fulvioferroni@teletu.it 2006.09.21 Copyright Fulvio Ferroni fulvioferroni@teletu.it Via Longarone, 6-31030 - Casier (TV) Le informazioni contenute
DettagliProgram m azione di Sistem a 6a
Program m azione di Sistem a 6a Basati sui lucidi per il corso di Laboratorio di Sistemi Operativi tenuto da Paolo Baldan presso l'università Ca' Foscari di Venezia, anno accademico 2004/ 2005. Parte di
Dettagli