unsigned long inet_addr(cp) char *cp;



Documenti analoghi
(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ&

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

L uso di Socket UDP. TCP vs. UDP UDP

Esempio 1: stampa locale di file remoto

Implementazione di un server. Server iterativo. Offro servizio ad un client alla volta. Dobbiamo scrivere un programma in C che offre un servizio

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

IPC Inter Process Communication

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Introduzione ai socket

L uso di Socket UDP. Usiamo le API Winsock incluse in <Winsock.h> A.A. 2005/06. Dott.ssa Valeria Carofiglio

*HVWLRQHDYDQ]DWDGHOOH6RFNHWLQ& ODSULPLWLYDVHOHFW

Program m azione di Sistem a 6

Programmazione socket. Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.

Applicazione distribuita

Socket TCP. seconda parte

Laboratorio di Sistemi Operativi Cognome Nome Mat.

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 6

Reti (già Reti di Calcolatori )

I Socket. Laboratorio Software M. Grotto R. Farina

Una semplice applicazione client/server 1

Un server di posta (che usa il protocollo SMTP) è identificato dal numero di porta 25.

Progettazione di un client TCP. Progettazione di un server TCP. Esempio: daytime TCP. Client TCP daytime

LABORATORIO di Reti di Calcolatori

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/ Comunicazione Tra Processi (IPC) Parte -

C UDP in Windows p53 - variante 1

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017. Ing. Niccolò Iardella

Acknowledgment: Prof Vincenzo Auletta, Università di Salerno. Approfondimento alla programmazione distribuita

Socket TCP. prima parte

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori T

Esercitazione Laboratorio di Sistemi Operativi Cognome Nome Mat.

Esempio 1: stampa locale di file remoto

Programmazione di Rete

Interazione (TCP) Client-Server con le socket

Scrittura dei programmi applicativi di rete

Cenni di programmazione distribuita in C++ Mauro Piccolo

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

Una socket è un punto estremo di un canale di comunicazione accessibile mediante un file descriptor. Alcuni tipi predefiniti di socket

TECN.PROG.SIST.INF. UDP socket in Windows. Roberta Gerboni

Guida all' uso dei sockets nella programmazione in C

Esercitazione sulle Socket

Domain Name Service. Mapping nomi/indirizzi con Socket API in C

Laboratorio di Programmazione in Rete

Socket. [Pagina intenzionalmente vuota] 2: Socket ( ) slide 2:1/50 (p.24)

Architettura e servizi Internet

Creare un'elementare backdoor in C in ambiente UNIX

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Esercitazione [6] Client/Server con Socket

Program m azione di Sistem a 6a

SCUOLA DI INGEGNERIA DELL INFORMAZIONE. Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico Prof. William FORNACIARI

Scrittura dei programmi applicativi di rete

Inter-process communication: socket

Basic Sniffer Tutorial

Computazione su Rete Socket Internet Applications (Client-Server Concept, Use of Protocol Ports, Socket API, DNS, , TELNET, FTP)

Introduzione alla programmazione C di socket

T.A.R.I. Socket (ICT, AL)

SC per Inter Process Comminication. Comunicazione fra macchine diverse: socket

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

L interfaccia socket

Socket Programming. Socket Programming. Università di Palermo

5 Esercitazione (svolta):

Interazione (TCP) Client-Server con le socket

Comunicazioni fra processi remoti: i socket nello UNIX di Berkeley

Corso di Sistemi Operativi Esercitazioni

INTERNET DOMAIN SOCKETS (Cap.59)

LABORATORIO di Reti di Calcolatori

Interazione con il DNS Conversioni di Nomi ed Indirizzi

Laboratorio di Programmazione in Rete

Una prima applicazione in C per l utilizzo delle socket

Socket (Seconda Parte) Acknowledgment: Prof Vincenzo Auletta, Università di Salerno

IPC System V. Code di messaggi

Il sistema operativo LINUX Inter Process Communication. Sommario. popen ( ) PIPE. pipe ( ) popen ( ) Sistemi operativi Modulo II

Esercitazioni Socket

Creare una applicazione Winsock di base

Politecnico di Milano FACOLTÀ DI INGEGNERIA DELL INFORMAZIONE. Prof. William FORNACIARI

INTRODUZIONE ALL INTERFACCIA SOCKET DI BERKELEY E.Mumolo IL MODELLO CLIENT/SERVER

Programmazione di applicazioni di rete

Corso di Reti di Calcolatori T

IPC: InterProcess Communication

IPC: InterProcess Communication

Comunicazione Connectionless o Datagram

La programmazione di rete

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-

Programmazione di sistema

request reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A.

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/ Comunicazione Tra Processi (IPC)- - 1 Parte -

Interprocess Communications - II. Franco Maria Nardini

Esercitazione [08] Server multi-process/multi-thread

Sistemi Operativi (M. Cesati)

Reti Informatiche. Socket (Seconda Parte) Acknowledgment: Prof Vincenzo Auletta, Università di Salerno

Laboratorio di Reti di Calcolatori

I.I.S. G.B. PENTASUGLIA MATERA ISTITUTO TECNICO SETTORE TECNOLOGICO LICEO SCIENTIFICO SCIENZE APPLICATE. Classe: 5Ci

Programmazione I. De Marco - Zizza. De Prisco - Senatore. Ritirato. Appello di Luglio (prima prova) 18 luglio Cognome: Nome: Matricola:

Esercitazione [7] Client/Server con Socket

Socket I MIDLAB. Sirio Scipioni. M I D L A B

rsystem Maximiliano Marchesi

Transcript:

/* bcopystru.c #include <memory.h> 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= struct point *) mallocsizeof struct point)); ptb= struct point *) mallocsizeof struct point)); pta->x)= 10; pta->y)= plutonio ; bcopypta, ptb, sizeofstruct point)); printf la dimensione di *pta e *ptb: %d %d\n, sizeof*pta), sizeof*ptb)); printf la dimensione di pta e ptb: %d %d\n, sizeofpta),sizeofptb)); printf i valori del primo point sono: %d %s\n,pta->x, pta->y); printf i valori del secondo point sono: %d %s\n,ptb->x, pta->y); printf i valori degli indirizzi pta->x, di ptb->:%d %d\n,&pta->x), &ptb->x)); printf i valori degli indirizzi pta->y e di ptb->y: %ld %ld\n, pta->y, ptb ->y); return0); i valori del secondo point sono:5 pippo la dimensione di *pta e *ptb: 8 8 la dimensione di pta e ptb: 4 4 i valori del primo point sono: 10 plutonio i valori del secondo point sono: 10 plutonio i valori degli indirizzi pta->x, di ptb->:33336 33352 i valori degli indirizzi pta->y e di ptb->y: 16626 16626

/* intoa.c #include <memory.h> #include <malloc.h> #include <netinet/in.h> /* Internet domain, e il file header piu aggiornato che riguarda l Internet, contiene la definizione di struct in_addr #include <arpa/inet.h> #include <netdb.h> /* contiene la definizione di struct hostent /* char * inet_ntoain) struct in_addr in; unsigned long inet_addrcp) char *cp; struct in_addr struct...; struct...; u_long s_addr; ); struct in_addr server; char *s; unsigned long a; server.s_addr= 255; s= inet_ntoaserver); printf indirizzo: %s\n, s); server.s_addr= 256; s= inet_ntoaserver); printf indirizzo: %s\n, s); server.s_addr= 65535; s= inet_ntoaserver); printf indirizzo: %s\n, s); s= 0.0.1.200 ; a= inet_addrs); printf indirizzo numerico: %u\n, a); returno0); /* prompt> cc intoa.c prompt> a.out indirizzo: 0.0.0.255 indirizzo: 0.0.1.0 indirizzo: 0.0.255.255 indirizzo numerico:456

/* pro.c mainargc, argv) int argc; char *argv; int port, porta; printf %s\n, argv[1]); port= atoiargv[2]); sscanfargv[2], %d, &porta); printf %d\n, port); printf %d\n, porta); return0); ) /* pro 34 89 34 89 89

/* cliu1.c /* Il programma da utilizzarsi in combinazione con servu1.c, genera un socket, nel dominio Unix, di nome endpoint2, attraverso il quale questo programma si mette in comunicazione con il socket, nel dominio di Unix, di nome endpoint1, generato dal programma servu1.c, per inviargli un messaggio dal programma cliu1.c e poi per ricevere un messaggio di risposta. Tale esempio mostra la bidirezionalita del socket endpoint2 #include <sys/un.h /* Unix domain #define BUFLEN 1024 char *msg = Richiesta di servizio dal cli_sock ; int s; int addrlen = sizeofstruct sockaddr_un); struct sockddr_un cli_sock; struct sockaddr_un aiuto; /* struct di appoggio che consente di fare la sendto char buf[buflen]; int cc; /* genera il socket nel dominio UNIX: s= socketaf_unix, SOCK_DGRAM, 0); if s== - 1) perror Client: socket\n ); else printf generazione del socket %d: ok\n, s); /* fai la bind: cli_sock.sun_family = AF_UNIX; strcpycli_sock.sun_path, endpoint2 ); if binds, &cli_sock, sozeofstruct sockaddr_un)) == -1 ) perror Client: bind\n ); /*trasmetti un messaggio attraverso il socket s verso il socket endpoint1 : aiuto.sun_family = AF_UNIX; strcpyaiuto,sun_path, endpoint1 ); if sentos,msg, strlenmsg) +1, 0, &aiuto, strlenaiuto.sun_path)+2) == -1 ) perror Client: error send\nn ); ) printf ATTESA DATI DAL SERVER \n ); /* leggi dal socket s: if cc= reads, buf, BUFLEN)) == -1 perror Client: read\n ); printf Client: ricevuto -> %s\n, buf); unlink endpoint2 )

/*servu1.c /* Il programma da utilizzarsi in combinazione con cliu1.c, genera un socket, nel dominio di Unix, di nome endpoint1, attraverso il quale questo programma si mette in comunicazione con il socket, nel dominio di Unix, di nome endpoint2, generato dal programma cliu1.c, per ricevere un messaggio dal programma cliu1.c e poi per inviargli un messaggio di risposta. Tale esempio mostra la bidirezionalita del socket endpoint1. #include <sys/un.h /* Unix domain #define BUFLEN 1024 char *msg = Messagio dal server ; int s; int addrlen = sizeofstruct sockaddr_un); struct sockaddr_un appoggio: /* struct di appoggio che consente di effettuare la recvfrom struct sockaddr_un serv_sock; char buf[buflen]; /* genera il socket nel dominio UNIX: s = socketaf_unix, SOCK_DGRAM, 0); if s == -1) perror Server: socket\n ); else printf generazione del socket %d: ok\n, s); /* fai la bind: serv_sock.sun_family = AF_UNIX; strcpyserv_sock.sun_path, endpoint1 ); if binds, &serv_sock, sizeofstruct sockaddr_un)) == -1 ) perror Server:bind\n ); /* metti il socket s in ricezione di cio che giunge da appoggio: if recvfroms, buf, BUFLEN, 0, &appoggio, &addrlen) == -1 ) perror Server: recvfrom\n ); printf MESSAGGIO DAL CLIENT: %s \n, buf); if sendtos, msg, strlenmsg) -1, 0, &appoggio, addrlen) == -1) perror Server: send\n ); unlink endpoint1 );

/* cliu11.c /* Il programma e una variante di cliu1.c Il programma da utilizzarsi in combinazione con servu11.c, genera un socket, nel dominio di Unix, di nome endpoint2, attraverso il quale questo programma si mette in comunicazione con il socket, nel dominio di Unix, di nome endpoint1, generato dal programma servu11.c, per inviargli un messaggio dal programma cliu11.c e poi per ricevere un messaggio di risposta. Tale esempio mostra la bidirezionalita del socket endpoint2. #include <sys/un.h> /* UNIX domain #define BUFLEN 1024 char *msg = Richiesta di servizio dal cli_sock ; int s; int addrlen = sizeofstruct sockaddr_un); struct sockaddr_un cli_sock; struct sockaddr_un aiuto; /* struct di appoggio che consente di fare la sendto char buf[buflen]; int cc; /* genera il socket nel dominio UNIX: s = socketaf_unix, SOCK_DGRAM, 0); if s== -1) perror Client: socket\n ); else printf generazione del socket %d: ok\n, s); /* fai la bind: cli_sock.sun_family = AF_UNIX; strcpycli_sock.sun_path, ëndpoint2 ); if binds, &cli_sock, sizeofstruct sockaddr_un)) == -1) perror Client:bind\n ); /* trasmetti un messaggio attraverso il socket s verso aiuto: aiuto.sun_family = AF_UNIX; strcpyaiuto.sun_path, endpoint1 ); if sendtos, msg, strlenmsg) +1, 0, &aiuto, strlenaiuto.sun_path)+2) == -1) perror Client: error send\n ); printf ATTESA DATI DAL SERVER \n ); /* leggi dal socket s: if cc= reads, buf, BUFLEN)) == -1) perror Client: read\n ); printf Client: ricevuto -> %s\n, buf); unlink endpoint2 );

/* servu11.c /* Il programma e una variante di servu1.c Il programma da utilizzarsi in combinazione con cliu11.c, genera un socket, nel sominio Unix, di nome endpoint1, attraverso il quale questo programma si mette in comunicazione con il socket, nel dominio di Unix, di nome endpoint2, generato dal programma cliu1.c, per ricevere un messaggio dal programma cliu1.c e poi per inviargli un messaggio di risposta. Tale esempio mostra la bidirezionalita del socket endpoint1. #include <sys/un.h> /* UNIX domain #define BUFLEN 1024 char *msg = Messaggio dal server ; int s; int addrlen = sizeofstruct sockaddr_un); struct sockaddr_un appoggio; /* struct di appoggio che consente di effettuare la recvfrom struct sockaddr_un serv_sock; char buf[buflem]; /* genera il socket nel dominio Unix: s= socketaf_unix, SOCK_DGRAM, 0); if s== -1) perror Server: socket\n ); else printf generazione del socket %d: ok\n, s); /* fai la bind: serv_sock.sun_family = AF_UNIX; strcpyserv_sock.sun_path, endpoint1 ); if binds, &serv_sock, sizeofstruct sockaddr_un)) == -1) perror Server: bind\n ); if recvfroms, buf, BUFLEN, 0, &appoggio, &addrlen) == -1 ) perror Server: recvfrom\n ); printf MESSAGGIO DAL CLIENT: %s \n, buf); if sendtos, msg, strlenmsg) -1, 0, &appoggio, addrlen) == -1) perror Server: send\n ); unlink endpoint1 );

/* cli1.c /* sintassi: clisun <hostname> < port number socket destinatario> #include <netinet/in.h> #include <netdb.h> #define DATA Tanto va la gatta a lardo, che ci rimette lo zampino mainargc, argv) int argc; char *argv[]; int so; struct sockaddr_in aiuto; struct hostent *hp, *gethostbyname); so= socketaf_inet, SOCK_DGRAM, 0); if so <0) perror errore nella creazione del socket\n ); hp= gethostbynameargv[1]); if hp == 0) fprintfstderr,, %s: host0 sconosciuto\n, argv[1]); bcopychar *) hp->h_addr, char*) &aiuto.sin_addr, hp->h_length); aiuto.sin_family= AF_INET; aiuto.sin_port= htonsatoiargv[2])); if sendtoso, DATA, sizeofdata), 0, struct sock_addr *) &aiuto, sizeofaiuto)) <0) perror errore nell invio del messaggio datagram\n ); closeso);

/* serv1.c /* Da usarsi in congiunzione con cli1.c #include <netinet/in.h> int sock, lun; struct sockaddr_in nome; char buf[1024]; struct sockaddr_in *from; int fromlen; fromlen= sizeofstruct sockaddr_in); sock= socketaf_inet, SOCK_DGRAM, 0); /* fai la bind con una wildcard: nome.sin_family= AF_INET; nome.sin_addr.s_addr= INADDR_ANY; nome.sin_port = 0; if bindsock, struct sockaddr *) &nome, sizeofnome) ) <0) perror errore nella binding\n ); lun= sizeofnome); if getsocknamesock, struct sockaddr *) &nome, &lun) < 0) perror errore nel trovare la porta associata al socket nome\n ); printf porta del socket #%d\n, ntohsnome.sin_port)); /* if readsock, buf, 1024) < 0) perror errore nella ricezione del pacchetto di datagram\n ); if recvfromsock, buf, sizeofbuf), 0, struct sockaddr *) from, &fromlen) < 0) perror errore nella ricezione del pacchetto di datagram\n ); printf ------------%s\n, buf); closesock); exit0);