IL PACKAGE java.net
Questo package definisce fondamentalmente:
più una serie di classi correlate:
I/O VIA SOCKET
Le socket sono associate a un InputStream e a un OutputStream: quindi, per scrivere e leggere si usano le normali primitive previste per gli stream.
È anche possibile incapsulare tali stream in stream più sofisticati, come ampiamente discusso a proposito del package di I/O.
![]()
ESEMPIO - Apertura di un URL specificato
La classe URL è la base per creare connessioni HTTP.
Qui ci si connette allURL dato e si visualizza ciò che viene inviato dal server (nellipotesi che si tratti di testo).
import java.io.*; import java.net.*;
class EsempioURL {
public static void main(String args[]){
String indirizzo = "file:///autoexec.bat";
URL u = null;
try { u = new URL(indirizzo);
System.out.println("URL aperto: " + u);
}
catch (MalformedURLException e) {
System.out.println("URL errato: " + u);
}URLConnection c = null;
DataInputStream istream = null;try {
System.out.print("Connessione in corso...");
c = u.openConnection();
c.connect();
System.out.println("ok.");BufferedInputStream b = new
BufferedInputStream(c.getInputStream());istream = new DataInputStream(b);
System.out.println("Lettura dei dati...");
String s;
while( (s = istream.readLine()) != null )
System.out.println(s);}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
![]()
ESEMPIO 1 - Una mini-applicazione client / server
Il client si limita a visualizzare tutto quello che gli è arriva dal server, fino a che non riceve il messaggio "Stop".
Il server assegna un numero progressivo, a partire da 1, a ogni client che si connette.
// IL CLIENT 1
// Ipotesi: server port (fisso) = 11111
import java.io.*; import java.net.*;
class Client1 {
public static void main(String args[]){
Socket s = null;
DataInputStream is = null;try {
s = new Socket("localhost", 11111);
is = new DataInputStream(s.getInputStream());
}
catch (IOException e) {
System.out.println(e.getMessage());
System.exit(1);
}
System.out.println("Socket creata: " + s);try {
String line;
while( (line=is.readLine())!=null ) {
System.out.println("Ricevuto: " + line);
if (line.equals("Stop")) break;
}
is.close(); // chiusura stream
s.close(); // chiusura socket}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
// IL SERVER 1
import java.io.*; import java.net.*;
class Server1 {
public static void main(String args[]){
ServerSocket serverSock = null;
Socket cs = null;
int numero = 1;
System.out.print("Creazione ServerSocket...");try {
serverSock = new ServerSocket(11111);
}
catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}while (numero<3) { // condizione arbitraria
System.out.print("Attesa connessione...");
try { cs = serverSock.accept(); }
catch (IOException e) {
System.err.println("Connessione fallita");
System.exit(2);
}System.out.println("Conness. da " + clSock);
try {
BufferedOutputStream b = new
BufferedOutputStream(cs.getOutputStream());
PrintStream os = new PrintStream(b,false);
os.println("Nuovo numero: " + numero);
numero++;
os.println("Stop"); os.close();
cs.close();
}
catch (Exception e) {
System.out.println("Errore: " +e);
System.exit(3);
}}
}
}
![]()
ESEMPIO 2 - Una mini-calcolatrice client / server
Il client invia al server una serie di righe di testo, contenenti numeri interi (uno per riga); lultima riga contiene lo zero.
Il server effettua la somma dei valori ricevuti e la ritrasmette al client; una riga contenente il valore 0 indica fine sequenza.
// IL CLIENT 2
import java.io.*; import java.net.*;
class Client2 {
public static void main(String args[]){
Socket c = null;
DataInputStream is = null;
PrintStream os = null;try {
c = new Socket("localhost", 11111);
is = new DataInputStream(c.getInputStream());
os = new PrintStream(new
BufferedOutputStream(c.getOutputStream()));
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}System.out.println("Socket creata: " + c);
// invio valori al server (da linea comandi)
for (int i=0; i<args.length; i++) {
System.out.println("Sending " + args[i]);
os.println(args[i]);
}
os.println("0"); os.flush();System.out.println("Attesa risposta...");
String line = null;
try {
line = new String(is.readLine());
is.close(); os.close(); s.close();
} catch (IOException e) {
System.err.println(e.getMessage());
}System.out.println("Msg dal server: " + line);
}
}
// IL SERVER 2
import java.io.*; import java.net.*;
class Server2 {
public static void main(String args[]){
ServerSocket serverSock = null;
Socket cs = null;System.err.println("Creazione ServerSocket");
try {
serverSock = new ServerSocket(11111);
}
catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}while (true) {
System.out.println("Attesa connessione...");
try {
cs = serverSock.accept();
}
catch (IOException e) {
System.out.println("Connessione fallita");
System.exit(2);
}System.out.println("Connessione da " + cs);
try {
BufferedInputStream ib = new
BufferedInputStream(cs.getInputStream());
DataInputStream is = new DataInputStream(b);
BufferedOutputStream ob = new
BufferedOutputStream(cs.getOutputStream());
PrintStream os = new PrintStream(ob,false);String line; int y, x = 0;
do {
line = new String(is.readLine());
y = Integer.parseInt(line);
System.out.println("Value: " + y);
x += y;
} while (y!=0);os.println("Somma = " + x); os.flush();
os.close(); is.close(); cs.close();}
catch (Exception e) {
System.out.println("Errore: " +e);
System.exit(3);
}
}
}
}
![]()
ESEMPIO 3 - Un mini-FTP
Il client invia al server il nome di un file (di testo), preso dalla riga di comando.
Il server risponde spedendo al client il contenuto, riga per riga, di tale file. Sono gestite le situazioni particolari (file not found, etc.)
// IL CLIENT 3
import java.io.*; import java.net.*;
class Client3 {
public static void main(String args[]){
Socket s = null;
DataInputStream is = null;
PrintStream os = null;try {
s = new Socket("localhost", 11111);
is = new DataInputStream(s.getInputStream());
os = new PrintStream(new
BufferedOutputStream(s.getOutputStream()));
}
catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
System.out.println("Socket creata: " + s);// --- controllo argomenti
if (args.length==0) {
os.println("Missing file name");
os.flush(); os.close();
try {
is.close(); s.close();
}
catch (IOException e) {
System.out.println(e.getMessage());
}
System.exit(1);
}// --- invio messaggio
System.out.println("Sending " + args[0]);
os.println(args[0]); os.flush();// --- stampa risposta del server
System.out.println("Attesa risposta...");
String line = null;
try {
while ((line = is.readLine()) != null) {
System.out.println("Messaggio: " + line);
}
is.close(); os.close(); s.close();
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
Il server
Il server risponde spedendo al client il contenuto, riga per riga, di tale file. Sono gestite le situazioni particolari (file not found, etc.)
import java.io.*; import java.net.*;
class Server3 {
public static void main(String args[]){
ServerSocket serverSock = null;
Socket c = null;
System.err.println("Creazione ServerSocket");try {
serverSock = new ServerSocket(11111);
}
catch (IOException e) {
System.out.println(e.getMessage());
System.exit(1);
}while (true) {
System.out.println("Attesa connessione...");
try {
c = serverSock.accept();
}
catch (IOException e) {
System.out.println("Connessione fallita");
System.exit(2);
}System.out.println("Connessione da " + c);
// --- inizio colloquio col client
DataInputStream is = null;
PrintStream os = null;
try {
BufferedInputStream ib = new
BufferedInputStream(cs.getInputStream());
is = new DataInputStream(ib);
BufferedOutputStream ob = new
BufferedOutputStream(c.getOutputStream());
os = new PrintStream(ob,false);// --- ricezione nome file dal client
String n = new String(is.readLine());
System.out.println("File: " + n);// --- controllo esistenza file
if (n.equals("Missing file name")) {
os.flush();os.close();is.close();c.close();
}// --- invio del file al client
DataInputStream is = new
DataInputStream(new FileInputStream(n));
String r = null;while ((r = is.readLine())!=null) {
os.println(r);
}
os.flush();os.close();is.close();cs.close();
}
catch (FileNotFoundException e) {
System.out.println("File non trovato");
os.println("File non trovato");
os.flush(); os.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}
}
![]()