Strato Di Trasporto
Strato Di Trasporto
Strato Di Trasporto
Strato di trasporto
16 bit ! 0 - 65535
0 - 1023 riservati (FTP, HTTP, …)
http://java.sun.com/docs/books/tutorial/networking/
Working with URLs
!"#$%&'()&*$+$*(,$!"#-./001233,,,4%&'()&*456'31&%(73.89
!"#$%&'()&*:(0,6;<$+$*(,$!"#-%&'()&*=$.>&'()&*4*(04/0').89
!"#$%&'()&*:(0,6;<?6006'$+$*(,$!"#-%&'()&*:(0,6;<=
.@?ABBAC.89
!"#$%&'()&*$+$*(,$!"#-./001.=$.,,,4%&'()&*456'.=$DE=$$$$$$$
try {
.1&%(73>&'()&*4*(0,6;<4/0').89
URL myURL = new URL(. . .)
} catch (MalformedURLException e)
{
. . .
// exception handler code here
. . .
}
protocol = http
URLconnection: Reading a
URL
import java.net.*;
import java.io.*;
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader( new
InputStreamReader( yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close(); }
}
The following program performs the same function as the !"#"(&F(; program
You can use the URLConnection object for other tasks (like writing to the URL) at the same time.
Reading from and Writing
to a URLConnection (1/2)
import java.io.*;
import java.net.*;
public class Reverse { public static void main(String[] args)
throws Exception {
if (args.length != 1) {
System.err.println("Usage: java Reverse " +
"string_to_reverse");
System.exit(1);
}
String stringToReverse = URLEncoder.encode(args[0]); 1. Create a URL
URL url = new URL("http://java.sun.com/cgi-bin/backwards");
URLConnection connection = url.openConnection(); 2. Open a connection to
the !"#
connection.setDoOutput(true); 3. N(0$6G01G0$5&1&KI)I0U$6*
0/($!"#T6**(50I6*
} reversed is:
eM esreveR
Socket
Socket/2
• Classe Socket:
– Implementa la parte client dei socket TCP
– Mette a disposizione del client due stream da/verso
un’applicazione sulla macchina locale o su una remota
– Ovviamente richiede che l’applicazione server sia in ascolto
• Classe ServerSocket:
– Implementa la parte server dei socket TCP
– Permette all’applicazione server di attendere richieste dei
client su una porta
– Mette a disposizione del server due strem da/verso
l’applicazione client
Attenzione: lo stream “out” del client corrisponde allo stream
“in” del server e viceversa
Funzionamento generale
1. Apertura della connessione
– Lato client -> Socket: per aprire una connessione verso un
server in ascolto
– Lato server -> ServerSocket: per mettersi in ascolto di
richieste di connessione
2. Dialogo per mezzo della connessione
– Uso di InputStream per ricevere dati
– Uso di OutputStream per inviare dati
– Stream “attaccati” al socket
3. Chiusura
– InputStream
– OutputStream
– Socket
catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
}
catch (IOException e) {
System.err.println("Couldn't get I/O for " + "the
connection to: taranis.");
System.exit(1);
}
http://java.sun.com/products/jdk/1.2/docs/api/inde
x.html
Classe Socket - metodi
Server Echo/2
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
if (inputLine.equals("Bye."))
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
Interazione client - server
Server (su hostid) Client
Crea socket,
porta=x, per richieste
In arrivo:
serverSocket =
ServerSocket()
Scrivi risposta su
clientSocket Leggi risposta da
Bye. echoSocket
Chiudi
clientSocket Chiudi
echoSocket
Funzionamento generale
1. Apertura della connessione
– Lato client -> Socket: per aprire una connessione verso un
server in ascolto
– Lato server -> ServerSocket: per mettersi in ascolto di
richieste di connessione
2. Dialogo per mezzo della connessione
– Uso di InputStream per ricevere dati
– Uso di OutputStream per inviare dati
– Stream “attaccati” al socket
3. Chiusura
– InputStream
– OutputStream
– Socket
Estensioni
1. Modificare il server in modo che rimanga sempre in ascolto
2. Scrivere il client e il server che implementino il seguente
protocollo:
1. Server in attesa sulla porta 4444
2. Il client invia la stringa: “To upper case request”
3. Il server risponde con la stringa “To upper case request accepted”
4. Il client invia stringhe che il server restituisce dopo aver applicato
il metodo toUpperCase()
5. Se il server riceve la stringa “Bye.” allora risponde a sua volta con
“Bye”
6. A questo punto server e client possono chiudere la connessione
(il client solo dopo aver ricevuto a sua volta la stringa “Bye” dal
server)
Nota: il server rimane in ascolto di nuove connessioni