1 Windows Socket Programming Corso di Sistemi di Elaborazione delle Informazioni a.a 2006/2007 Autori: Alberto Colombo Fulvio Frati.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Socket Java Alberto Ferrari.
Java Stream e File.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Programmazione con socket
Reti di Calcolatori L’interfaccia socket
Mappare file in memoria
SC che operano su file (1)
Programmazione socket
I modelli di riferimento OSI e TCP/IP
La rete in dettaglio: rete esterna (edge): applicazioni e host
Come programmare servizi di rete?
Calcolatori Elettronici
Programmazione su Reti
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Introduzione agli stream e alle classi
Il modello cliente/servente per l’implementazione di applicazioni
TCP Transmission Control Protocol. Programmazione II: Programmazione su Reti -- Prof. G. Persiano 2 TCP TCP fornisce un servizio di connessione –orientato.
Reti di Calcolatori IL LIVELLO TRASPORTO Protocolli TCP e UDP.
I File.
Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
JAVA E LA RETE L’architettura Java è network-ready
Distributed File System Service Dario Agostinone.
Programmazione in Java (9) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit.
Corso di Informatica per Giurisprudenza Lezione 7
Cosa è una applicazione distribuita?
Il modello di riferimento OSI
Introduzione al controllo derrore. Introduzione Quando dei dati vengono scambiati tra due host, può accadere che il segnale venga alterato. Il controllo.
Modulo 4 – U.D. 1 – Lez. 6 Ernesto Damiani - Sistemi di elaborazione dell'informazione.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Distributed System ( )7 TCP/IP four-layer model.
FTP File Transfer Protocol
Come comunicano i processi ?
Programmazione ad oggetti
Laboratorio di Servizi Web - servlet - Ardissono 1 Java Servlet API package javax.servlet: include classi e interfacce di gestione di servlet indipendenti.
Livello di trasporto Protocolli TCP e UDP.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Politecnico di Milano © Domenico Barretta Processi concorrenti in Unix Docente Domenico Barretta Politecnico di Milano
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Chiamate di sistema Introduzione Errori : perror() Chiamate che lavorano su file.
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione 3.
MUSE 2 WIFI MUSic Everywhere with WIFI presentazione di Pierangeli Diego Membri del gruppo: Bambini Stefano Bergamini Andrea Pierangeli Diego AA 2006/2007.
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 1.
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione.
Servizi Internet Claudia Raibulet
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione 8.
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 2.
1.1 Corso di Sistemi Operativi: Programmazione di Sistema Corso di Laurea in Informatica, Università di Firenze Anno accademico 2010/2011 Prof. Luca Ferrari.
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 4.
Progetto e Realizzazione di un servizio di Chat Progetto di: Nicoli Leonardo Corso di: Reti di Calcolatori L-S.
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 2 -Telnet, FTP e altri Ernesto Damiani Lezione 4 – Napster e.
Mots, programmazione collaborativa di Ettore Ferranti.
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione 9.
10/10/20021 Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
GESTIONE RETI TCP/IP l troubleshooting è necessario per risolvere molti problemi che si possono verificare all'interno di una rete, una delle aspirazioni.
1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione può.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Corso di Reti di Calcolatori Interfaccia socket. [2] Introduzione La programmazione di rete è ciò che permette a due o più computer collegati da una rete.
Applicazione Presentazione Sessione Trasporto Rete Data link Fisico OSI Processo / Applicazione Trasporto Rete- Internet Interfaccia di.
INTERNET PROTOCOL SUITE FACOLTA’ DI INGEGNERIA Corso di Laurea Specialistica in Ingegneria delle Telecomunicazioni Docente: Prof. Pasquale Daponte Tutor:
1 Il livello transport. Concetti fondamentali - Canale logico e canale fisico 2 Quando un segnale deve essere trasmesso, viene inviato su un Canale, cioè.
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
Introduzione alle Classi e agli Oggetti in Java 1.
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
Come comunicano i processi ?
Il Livello di Trasporto
Transcript della presentazione:

1 Windows Socket Programming Corso di Sistemi di Elaborazione delle Informazioni a.a 2006/2007 Autori: Alberto Colombo Fulvio Frati

2 Sommario Richiami di TCP Classificazione dei socket Socket client-server UDP Socket client-server TCP Esempio server multiporta gethostbyname & gethostbyaddr Java Socket

3 Richiami di TCP: porte I protocolli TCP e UDP usano le porte per mappare i dati in ingresso con un particolare processo attivo su un computer. Ogni socket è legato a un numero di porta così che il livello TCP può identificare l’applicazione a cui i dati devono essere inviati. UDP / TCP Porta App #portaDati

4 Socket: definizione A livello programmatico, un Socket è definito come un “identificativo univoco che rappresenta un canale di comunicazione attraverso cui l’informazione è trasmessa” [RFC 147] La comunicazione basata su socket è indipendente dal linguaggio di programmazione. Client e server devono concordare solo su protocollo (TCP o UDP) e numero di porta

5 Richiami di TCP: well-known ports Le porte sono rappresentate da valori interi positivi (16 bit). Rappresentano punto di collegamento fra strato fisico e applicazioni; rappresentano un canale di comunicazione Alcune porte sono state riservate per il supporto di servizi well- known:  ftp  21/tcp;  telnet  23/tcp;  smtp  25/tcp;  login  513/tcp. I servizi e i processi a livello utente generalmente usano un numero di porta >=1024.

6 Socket: Comunicazione server client fork comm Il server riceve una richiesta da un client Crea un nuovo socket che dialogherà col client e torna in ascolto di altre richieste server client richiesta p server client’ new socket comm client p richiesta

7 Datagram Socket:  Utilizzano un protocollo senza connessione  UDP  Non è necessaria una procedura iniziale di connessione e riconoscimento fra client e server  Non dà garanzie di ricezione e ordine dei pacchetti Stream Socket:  Utilizzano un protocollo con connessione  TCP  La comunicazione avviene solo fra nodi tra cui è stato stabilito un canale di comunicazione  Garantisce ordine e ricezione dei pacchetti Raw socket:  Dà completo accesso allo strato fisico del sistema per poter sfruttare funzionalità non implementate dalle interfaccie  Solo per utenti esperti Socket: Classificazione (1)

8 Sincroni:  il client ed il server si sincronizzano ad ogni messaggio: sia send() (per inviare) che receive() (per ricevere) sono bloccanti  send() ritorna dopo che è stata fatta l’issue della receive  receive() ritorna solo dopo che il messaggio arriva in coda Asincrona:  send() non è bloccante, significa che l’operazione ritorna subito dopo che il messaggio è stato copiato su un buffer locale  receive() puo’ essere sia bloccante che non. Non bloccante significa che ritorna subito il controllo all’applicazione, poi tramite polling o interrupt notificherà l’accodamento del messaggio nella coda Socket: Classificazione (2)

9 Include files, tutte le librerie raccolte in una: WSAGetLastError() al posto della variabile errno closeSocket() al posto di close() Non supporta Raw Socket Fork implicito Differenze ambiente Unix e Windows #include #include #include #include #include #include

10 UDP/TCP client: Header

11 UDP/TCP Client: Inizializzazione librerie WSAStartup(version, WSAData): WORD version, versione delle librerie da caricare LPWSADATA WSAData, struttura per ricevere i dettagli della Windows Socket Implementation Necessaria solo in ambienti Windows

12 UDP/TCP Client: Creazione del socket socket(af, type, protocol): int af, famiglia di indirizzi da utilizzare (AF_INET, PF_INET, AF_UNIX); int type, tipo di socket (SOCK_STREAM, SOCK_DGRAM); int protocol, tipo di protocolo utilizzato (IPPROTO_UDP, IPPROTO_TCP). Restituisce un valore negativo se non a buon fine

13 UDP Client: sendTo() sendTo(socket, buffer, bufferLength, flag, to, toLength): int socket, descrittore del socket; char* echoString, messaggio da spedire; int bufferLength, dimensione in bytes; int flags, indica la modalità con cui viene effettuata la chiamata (default 0); sockaddr* to, indirizzo destinatario; int toLength, dimensione indirizzo in byte. Non è necessario una procedura di connessione fra client e server

14 UDP Client: recvfrom() recvfrom(socket, buffer, bufferLength, flags, from, fromLength): SOCKET socket, descrittore del socket; char* buffer, messaggio da spedire; int bufferLength, dimensione in bytes; int flags, indica la modalità con cui viene effettuata la chiamata (default 0). sockaddr* from, indirizzo mittente; int fromLength, dimensione indirizzo in byte.

15 UDP Client: Chiusura socket closesocket(socket): chiude il socket specificato e ritorna 0 se la chiusura è andata a buon fine, altrimenti un codice d’errore, recuperabile con WSAGetLastError(). WSACleanup(): rilascia la libreria.

16 UDP Server: Port Binding bind(socket, address, addressLength): SOCKET socket,descrittore del socket; sockaddr* address, indirizzo del socket; int addressLength, dimensione dell’indirizzo in byte. Lega ogni comunicazione su quel protocollo e su quella porta all’applicazione

17 UDP Server: Ricezione messaggi Il server rimane in attesa della ricezione di un messaggio sulla recvfrom() Nella struct echoclntAddr sono salvate tutte le informazioni relative al chiamante (in sin_addr l’indirizzo IP)

18 TCP Client: Creazione del socket Crea un socket basato su TCP di tipo STREAM

19 TCP Client: Connessione Stabilisce una connessione verso uno specifico client connect(socket, address, addressLength): SOCKET socket, descrittore del socket; sockaddr* address, indirizzo del server; int addressLength, dimensione dell’indirizzo in byte.

20 TCP Client: Invio dati Invia i dati specificati verso un socket già connesso Non è necessario indicare ogni volta l’indirizzo del mittente send(socket, buffer, bufferLength, flags): SOCKET socket, descrittore del socket; char* buffer, messaggio da inviare; int bufferLength, dimensione del messaggio in byte; int flag, indica la modalità con cui viene effettuata la chiamata (default 0).

21 TCP Client: Ricezione dati Riceve dati da un socket connesso e restituisce il numero di byte ricevuti Quando restituisce 0 la comunicazione è interrotta recv(socket, buffer, bufferLength, flag): SOCKET socket, descrittore del socket; char* buffer, messaggio da inviare; int bufferLength, dimensione del messaggio in byte; int flag, indica la modalità con cui viene effettuata la chiamata (default 0).

22 TCP Server: Connessione Dopo il bind, il server rimane in ascolto (listen) sul socket; listen(socket, backlog): SOCKET socket, descrittore del socket; int backlog, dimensione massima della coda delle connessioni in attesa.

23 TCP Server: Accettazione Quando un client richiede la connessione, viene un creato un nuovo socket per gestire la comunicazione Il socket iniziale rimane in attesa di nuove richieste accept(socket, clientAddress, clientAddressLength): SOCKET socket, descrittore del socket; sockaddr* clientAddress, indirizzo del client che ha richiesto l’accesso; int clientAddressLength, dimensione di clientAddress in byte.

24 TCP Server: Select (1) Permette di gestire simultaneamente più socket che gesticono porte diverse Primo passo: creazione di un array di socket ognuno su una porta differente; nell’esempio la lista delle porte è passata a riga di comando Per ogni porta è creato un socket server distinto

25 TCP Server: Select (2) La select() ad intervalli specificati, controlla quali socket hanno fatto richiesta in lettura, scrittura o hanno riscontrato errori di comunicazione e restituisce il numero di socket interessati I socket richiedenti sono marcati ed inseriti in specifici array per le successive operazioni select(0,readfds, writefds, errorfds, timeout): fd_set* readfs, puntatore all’array di socket in lettura; fd_set* writefs, puntatore all’array di socket in scrittura; fd_set* errorfs, puntatore all’array di socket controllati per errori; timeval* timeout, tempo di attesa per la select

26 TCP Server: Select (3) Per capire quali socket hanno richiesto l’accesso, si scorre l’array dei socket e si applica FD_ISSET() FD_ISSET restituisce un valore non-zero se il socket è stato marcato FD_ISSET(socket, *set): SOCKET socket, il descrittore del socket da controllare; fd_set *set, puntatore all’insieme dei socket marcati.

27 TCP Server: Select (4) Prima di ogni chiamata a select() è necessario inizializzare l’insieme dei socket marcabili. Occorre invocare: 1.FD_ZERO() svuota l’insieme dei socket marcati 2.FD_SET(), prepara la lista dei socket attivi, aggiungendo all’insieme il socket che potrà poi essere marcato dalla select()

28 gethostbyname() & gethostbyaddr() struct hostent *gethostbyname(const char *name); struct hostent *gethostbyaddr(const void *addr, int len, int type); Restituiscono un puntatore ad un oggetto di tipo hostent che descrive un indirizzo internet a partire da un nome o da un indirizzo Parametri:  name: nome dell’host da ricercare, es. “  addr, puntatore alla struttura in_addr che contiene l’indirizzo  len, lunghezza in byte della variabile addr  type, famiglia di indirizzi, es. AF_INET

29 Java socket Server:  Creare un oggetto ServerSocket, specificando il numero di porta a cui legarlo  Chiamare accept() per restare in attesa di richieste di connessione  Quando accept() ritorna la connessione col client è stabilita  accept() restituisce un socket per comunicare col client Client:  Creare un oggetto di classe Socket, specificando indirizzo e porta  Quando l’oggetto è costruito la connessione col server è stabilita La comunicazione avviene direttamente attraverso i canali messi a disposizione dall’oggetto Socket:  getInputStream(), getOutputStream(), ottengono rispettivamente un canale di input e di output

30 Java socket: Serializzazione Il meccanismo della serializzazione permette di scrivere e ricevere direttamente oggetti (istanze di classi) sui flussi in output e input Gli oggetti scambiati devono implemetare l’interfaccia Serializable La maggior parte delle classi standard implementa Serializable

31 Java Socket: Server (1) //SimpleServer.java: un semplice programma server import java.net.*; import java.io.*; public class SimpleServer { public static void main(String args[]) throws IOException { // Registra il servizio sulla porta 1234 ServerSocket s = new ServerSocket(1234); // Aspetta e accetta una connessione Socket s1=s.accept();

32 Java Socket: Server (2) // Ottiene un flusso di comunicazione associato al socket OutputStream s1out = s1.getOutputStream(); DataOutputStream dos = new DataOutputStream(s1out); // Invia una stringa! dos.writeUTF(“Hello world"); // Chiude la connessione, ma non il socket server dos.close(); s1out.close(); s1.close(); }

33 Java Socket: Client (1) // SimpleClient.java: un semplice programma client import java.net.*; import java.io.*; public class SimpleClient { public static void main(String args[]) throws IOException { // Apre la connessione a un server, alla porta 1234 Socket s1 = new Socket(“myserver.dti.unimi.it”,1234);

34 Java Socket: Client (2) // Ottiene un file handle dal socket e legge l’input InputStream s1In = s1.getInputStream(); DataInputStream dis = new DataInputStream(s1In); String st = new String (dis.readUTF()); System.out.println(st); // Alla fine, chiude la connessione e esce dis.close(); s1In.close(); s1.close(); }

35 Riassumendo UDPTCP

36 Annotazioni finali Le slide saranno pubblicate su References: MSDN – Getting started with Winsock