Modello -server Il server fornisce servizi sulla rete Viene eseguita l applicazione server su un host L applicazione attende connessioni dalla rete Il usufruisce del servizio attraverso la rete Deve conoscere l indirizzo del server (host+porta) Deve effettuare la richiesta di connessione Scambia dati con il server Sia il che il server sono programmi applicativi che utilizzano i servizi di rete Talvolta i termini e server si usano per riferirsi all host su cui viene eseguito l applicativo 1 Client multipli porta effimera server porta nota I aprono connessioni col server (apertura attiva) Il server apre una connessione su richiesta di un (apertura passiva) Un server sequenziale serve le richieste una dopo l altra (coda delle richieste) Un server parallelo divide il tempo fra le varie richieste (multithread) 2 1
netstat p n -inet -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 283 10.6.1.9:23 10.0.0.1:1855 ESTABLISHED 16907/in.telnetd: f tcp 0 0 10.6.1.9:3219 10.0.0.1:22 ESTABLISHED 5134/ssh tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 645/X tcp 0 0 0.0.0.0:3047 0.0.0.0:* LISTEN 635/kdm tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 587/smbd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 550/sshd2 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 510/master tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 408/inetd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 408/inetd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 349/portmap udp 0 0 0.0.0.0:177 0.0.0.0:* 635/kdm udp 0 0 0.0.0.0:111 0.0.0.0:* 349/portmap raw 0 0 0.0.0.0:1 0.0.0.0:* 7 - raw 0 0 0.0.0.0:6 0.0.0.0:* 7 - coda di ricezione (byte in coda) coda di trasmissione (byte senza ack) 3 Server sequenziale senza connessione (schema in C) server bind(sd,..) crea dati sendto(sd,..) recvfrom(sd,..) richieste le richieste sono accodate e servite in sequenza risposte recvfrom(sd,..) sendto(sd,..) close(sd) 4 2
Server sequenziale connesso (schema in C) bind(sd,..) server listen(sd,..) connect(sd,..) sc=accept(sd,..) write(sd,..) richieste read(sc,..) read(sd,..) risposte write(sc,..) close(sd) close(sc) Server parallelo connesso (schema in C) connect(sd,..) server child bind(sd,..) listen(sd,..) write(sd,..) richieste read(sc,..) sc=accept(sd,..) read(sd,..) risposte fork(..) write(sc,..) close(sd) close(sc) server parent 6 3
java.net E il package Java che mette a disposizione una serie di classi che supportano la programmazione di rete utilizzando i protocolli Internet (IP,TCP,UDP) InetAddress Classe che incapsula gli indirizzi IP e supporta la conversione fra indirizzi numerici e nomi simbolici (DNS) Socket Classe che implementa la socket SocketServer Classe che implementa la socket server (processo che attende connessioni su una porta) 7 InetAdress La classe mette a disposizione metodi che supportano le operazioni comuni sugli indirizzi Internet static InetAddress getlocalhost() produce un oggetto InetAddress che rappresenta l indirizzo dell host locale su cui è eseguito il programma static InetAddress getbyname(string host) produce un oggetto InetAddress che per un host specifico. Il nome dell host può essere espresso o con l indirizzo IP (es. 193.205.7.2) o con il nome della macchina (es. web.dii.unina2.it) String gethostname() produce il nome dell host String gethostaddress() - byte[] getaddress() producono l indirizzo IP (come stringa o array di 4 byte) 8 4
Socket Implementa i socket per connessione I metodi principali sono Socket(InetAddress a, int port) costruttore di un oggetto socket connesso con l host di indirizzo a sulla porta port. Può generare un eccezione se non si riesce ad aprire la connessione InputStream getinputstream() produce il canale di lettura dal socket (si gestisce come un file) OutputStream getoutputstream() produce il canale di scrittura sul socket (si gestisce come un file) void close() chiude il socket 9 ServerSocket Implementa il server TCP: il server rimane in ascolto su una porta specificata nel costruttore fino a quando non c è una richiesta di connessione da parte di un Le richieste vengono accodate ServerSocket(int port) costruttore di un oggetto server in ascolto sulla porta specificata Socket accept() metodo bloccante fino a che non si verifica una richiesta di connessione. Viene prodotto l oggetto socket che rappresenta la connessione 10 5
java.net per UDP DatagramSocket: Classe che implementa socket e server utilizzando UDP Costruttore senza argomenti per il, con il numero di porta per il server metodi send(datagrampacket p) e receive(datagrampacket p) definizione di un timeout SO_TIMEOUT per il receive con setsotimeout (int timeout) DatagramPacket: Classe per rappresentare un datagram per invio o ricezione DatagramPacket(byte[] buffer,int length,inetaddress,int port) costruisce un datagram per spedizione. L indirizzo rappresenta l IP del destinatario, l ultimo parametro il numero di porta void setdata(byte[] buffer) inserisce dati nel pacchetto da inviare DatagramPacket(byte[] buffer,int lenght ) costruisce un datagram per ricezione. L array di byte è il buffer usato per memorizzare il datagram, l intero è la lunghezza InetAddress getaddress() e int getport() sono usati per ottenere IP e porta del mittente del datagram byte[] getdata() ottiene i dati del pacchetto 11 6