-Ivan-
15-12-2009, 10:18
Devo creare una connessione tcp ip tra una applet e una application che gira su un server, è la prima volta che lo faccio ed ho un problema (penso di aver capito quale).
Vi mostro il codice(per adesso ometto la parte relativa al thread perchè l'ho provata e il problema non dovrebbe essere lì, i metodi Config.* sono corretti e non fanno altro che restituire il valore di alcune variabili settate in un altro file).
Lato server:
try
{
ServerSocket serverSocket = new ServerSocket(Config.getAPPPORT());
System.out.println("[SERVER PRONTO]");
while ( true )
{
// Attendo una connessione ascoltando la ServerSocket
Socket clientSocket = serverSocket.accept();
// Genero un thread che gestisca la richiesta
ApplicationThread applicationThread =
new ApplicationThread( clientSocket );
applicationThread.start();
}
}
catch ( IOException e )
{
e.printStackTrace();
System.exit( 1 );
}
Lato client:
try{
socket=new Socket(Config.getSERVERADD(), Config.getAPPPORT());
}
catch(Exception ex)
{
System.out.println("Errore nella connessione al server");
ex.printStackTrace();
}
Questo è il codice iniziale che ho e che funziona per la prima parte del programma, cioè quando la applet invia un documento al server che è pronto a riceverla.
Adesso devo fare in modo che il server possa rispondere, dunque anche la applet deve avere un thread in attesa di una eventuale risposta.
Se io aggiungo queste due righe di codice lato client:
AppletThread applicationThread = new AppletThread( socket );
applicationThread.start();
mi da errore la applet:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
Devo fare un ciclo while anche dentro alla applet?
Vi mostro il codice(per adesso ometto la parte relativa al thread perchè l'ho provata e il problema non dovrebbe essere lì, i metodi Config.* sono corretti e non fanno altro che restituire il valore di alcune variabili settate in un altro file).
Lato server:
try
{
ServerSocket serverSocket = new ServerSocket(Config.getAPPPORT());
System.out.println("[SERVER PRONTO]");
while ( true )
{
// Attendo una connessione ascoltando la ServerSocket
Socket clientSocket = serverSocket.accept();
// Genero un thread che gestisca la richiesta
ApplicationThread applicationThread =
new ApplicationThread( clientSocket );
applicationThread.start();
}
}
catch ( IOException e )
{
e.printStackTrace();
System.exit( 1 );
}
Lato client:
try{
socket=new Socket(Config.getSERVERADD(), Config.getAPPPORT());
}
catch(Exception ex)
{
System.out.println("Errore nella connessione al server");
ex.printStackTrace();
}
Questo è il codice iniziale che ho e che funziona per la prima parte del programma, cioè quando la applet invia un documento al server che è pronto a riceverla.
Adesso devo fare in modo che il server possa rispondere, dunque anche la applet deve avere un thread in attesa di una eventuale risposta.
Se io aggiungo queste due righe di codice lato client:
AppletThread applicationThread = new AppletThread( socket );
applicationThread.start();
mi da errore la applet:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
Devo fare un ciclo while anche dentro alla applet?