Newsgroup: it.comp.java
Titolo: client/server problemONE da risolvere

Caso a)
Se avvio l'applicazione server dalla riga di comando del server, il sistema
client/server funziona correttamente.
Caso b)
Se avvio l'applicazione del server con un applet utilizzando il browser del
server stesso, il sistema client/server funziona correttamente.
In quest'ultimo caso, nella classe dell'applet, all'esterno del blocco init() e naturalmente prima delle righe che avviano l'applivazione client, ho scritto:
ApplicazioneServer server = new ApplicazioneServer();
server.start();
Caso c)
Ora, se avvio l'applicazione del server l'applet utilizzando il browser del client l'applicazione server viene avviata da remoto (e fa quello che faceva nel caso b): ne sono sicuro, visto che si aprono delle finestre, etc. sul monitor del client relative a quella classe). 
Quando poi all'utente del client (in questo caso io) viene chiesto in un pannello di premere un pulsante, che avvia il metodo presente nel client e di seguito riportato, per connettersi al server,
private void connetti() throws UnknownHostException,IOException{
try{ 
sock = new Socket(urlServer,porta);
streamOggettoUscita = new ObjectOutputStream(sock.getOutputStream());
try{
streamOggettoIngresso = new ObjectInputStream(sock.getInputStream())
} catch (StreamCorruptedException sce) {
areaTesto.append("Eccezione: " + sce.getMessage() + '\n'); 
} catch (IOException ioe){
areaTesto.append("Eccezione: " + ioe.getMessage() + '\n');
}
} catch (UnknownHostException uhe) {
areaTesto.append("Eccezione: " + uhe.getMessage() + '\n');
} catch (IOException ioex){
areaTesto.append("Eccezione: " + ioex.getMessage() + '\n');
}
}//fine connetti() 
il metodo genera l'eccezione ioex comunicando il seguente messaggio:
"connection refused."
Cioè il server non è in ascolto! (Visto che, vi assicuro, l'indirizzo del server (urlServer) è corretto).
Cosa è successo allora all'interno del metodo run() presente nell'applicazione server di seguito riportato
(visto che esso è stato eseguito insieme all'applicazione server) ?
public void run() { 
    areaTesto.append('\n' + "Il server è in attesa di connessioni sulla porta " + porta + "..." + '\n' + '\n'); 
    while(buleana){
	Socket clientSocket = null;
	try { 
       clientSocket = serverSocket.accept();
       } catch (IOException ioe) { 
       areaTesto.append("Eccezione : impossibile accettare la richiesta di connessione" + ioe.getMessage() + '\n' + '\n'); 
       areaTesto.append("Il server è di nuovo in attesa di connessioni sulla porta " + porta + "... " + '\n' + '\n'); 
       continue; 
       } catch (SecurityException se){
	   areaTesto.append("Eccezione : " + se.getMessage());
	   continue;
	   }//fine try-catch() 
}//fine while
}//fine run()
Grazie a tutti e ciao,
Fernando.
------------------------------------------------------------------------
Questo messaggio e` stato inviato da 
http://www.inwind.it

Forse, anzi no! ... sicuramente non ho capito bene. Tu vorresti creare una
applicazione client-server dove č il client (applet o programma che sia) che
avvia il server?
Se č davvero cosě questa me la devi proprio spiegare.
Ciao.
Greybear

Come posso fare?
Documentandoti. Gettando uno sguardo a tecnologie come RMI, Servlet,
CORBA, SOAP, Jini... e altro ancora.
PS
Se puoi, imposta il newsreader per andare a capo. Grazie.
-- 
Ciao
	Fabrizio C.

 E questo si che è un problema!
Non averne a male ma mi sembra che l'unico problema è che tu non hai capito
niente delle architetture client-server basate su demoni di servizio. La tua
impostazione è a dir poco assurda da qualunque parte la si guardi e, anche
ammesso per assurdo che funzioni, non capisco nemmeno a che cavolo possa
servire.
I casi sono due: o con l'età mi sono rimbambito io o hai ragione tu ed negli
ultimi tre anni ho fatto solo ca##ate.
Ciao.
Greybear.

 Se puoi, imposta il newsreader per andare a capo.
Scusa l'ignoranza: cos'è il newsreader?

Ok, ciò  che ho pensato di fare non è realizzabile.
Ho solo un'ultima pulce nell'orecchio:
visto che l'applicazione server, come già detto, viene correttamente avviata
dal client (cioè senza generare eccezioni di alcuna sorta) tramite la
famigerata applet,
se il seguente metodo non mette in ascolto il server, quale altro computer
pone in ascolto?
Il client no, ho già provato!
E' solo una curiosità, che non ha nessun fine se non quello di capire come
vanno le cose...
Non ti adirare...
public void run()
areaTesto.append('\n' + "Il server è in attesa di connessioni sulla porta "
+ porta + "..." + '\n' + '\n');
    while(buleana){
Socket clientSocket = null;
try {
       clientSocket = serverSocket.accept();
       } catch (IOException ioe) {
       areaTesto.append("Eccezione : impossibile accettare la richiesta di
connessione" + ioe.getMessage() + '\n' + '\n');
       areaTesto.append("Il server è di nuovo in attesa di connessioni sulla
porta " + porta + "... " + '\n' + '\n');
       continue;
       } catch (SecurityException se){
   areaTesto.append("Eccezione : " + se.getMessage());
   continue;
   }//fine try-catch()
}//fine while
}//fine run()
Ciao,
Fernando.

Scusa l'ignoranza: cos'è il newsreader?
Un nome un po' generico per indicare il programma (o servizio) che usi
per leggere e postare sul newsgroup.
-- 
Ciao
	Fabrizio C.

Il client no, ho già provato!
Puoi dire come hai fatto a provarlo e cosa ti porta a questa
conclusione?
La classe-server che contiene accept() è nel computer A.
Il computer che, tramite un applet (cioè da remoto), avvia la classe-server
che contiene accept() è nel computer B.
Da un computer C ho avviato tramite un applet la classe-client contenuta nel
computer A.
In tale classe è contenuta la seguente porzione di codice:
private void connetti() throws UnknownHostException,IOException{
try{
sock = new Socket(urlComputerB,porta);
streamOggettoUscita = new ObjectOutputStream(sock.getOutputStream());
try{
streamOggettoIngresso = new ObjectInputStream(sock.getInputStream())
} catch (StreamCorruptedException sce) {
areaTesto.append("Eccezione: " + sce.getMessage() + '\n');
} catch (IOException ioe){
areaTesto.append("Eccezione: " + ioe.getMessage() + '\n');
}
} catch (UnknownHostException uhe) {
areaTesto.append("Eccezione: " + uhe.getMessage() + '\n');
} catch (IOException ioex){
areaTesto.append("Eccezione: " + ioex.getMessage() + '\n');
}
}//fine connetti()
Se è il computer B che sta in ascolto, allora la connessione da C a B
dovrebbe andare a buon fine, invece ciò non accade.
Ho provato anche a connettermi da B a B, modificando la classe-client nel
seguente modo:
private void connetti() throws UnknownHostException,IOException{
try{
sock = new Socket("localhost",porta);
streamOggettoUscita = new ObjectOutputStream(sock.getOutputStream());
try{
streamOggettoIngresso = new ObjectInputStream(sock.getInputStream())
} catch (StreamCorruptedException sce) {
areaTesto.append("Eccezione: " + sce.getMessage() + '\n');
} catch (IOException ioe){
areaTesto.append("Eccezione: " + ioe.getMessage() + '\n');
}
} catch (UnknownHostException uhe) {
areaTesto.append("Eccezione: " + uhe.getMessage() + '\n');
} catch (IOException ioex){
areaTesto.append("Eccezione: " + ioex.getMessage() + '\n');
}
}//fine connetti()
ma il risultato è lo stesso, la connessione non va a buon fine.
"Fabrizio Camera" <f.came...@Mtiscalinet.it> ha scritto nel messaggio
news:3b7148bb...@news.libero.it...


ma il risultato è lo stesso, la connessione non va a buon fine.
Secondo me, hai una grossa confusione riguardo ai ruoli di server e
client. Almeno questo è quanto riesco a capire dai tuoi messaggi, ma
potrebbe anche essere un limite mio...
PS
Se ci tieni alla salute mentale dei lettori del NG, PER PIACERE, quota
meglio! ;-)
-- 
Ciao
	Fabrizio C.