PDA

View Full Version : [Java]Non_riesco_a_leggere_dati_da_socket


Voltron
29-07-2009, 19:18
Ciao a tutti.:)
Come da titolo, ho realizzato un client che si connette ad un server (già esistente e correttamente funzionante); riesco ad inviare correttamente i dati (stringhe in formato xml) ma non riesco a catturare le risposte dal server (che vengono correttamente generate ed inviate).

Di seguito il codice del client :

public class Connection{

private Socket socket;
private PrintWriter out;
private BufferedReader in;


private CredentialsMessage credentials;
private AlignmentMessage alignmentMessage;

public Connection() {
credentials = new CredentialsMessage();
alignmentMessage = new AlignmentMessage();
}


public void connect(){
try {
String fromServer = "";

System.out.println("Apertura connessione...");

socket = new Socket("10.10.15.229", 36864);

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

System.out.println("Connesso!!!!!!!!!!!!!!!");

out.println(credentials.getCredentials());
out.println(alignmentMessage.getAlignmentMessage());

System.out.println("inizio a leggere le risposte");

do{
fromServer = in.readLine();
System.out.println(fromServer);
}while(fromServer!=null);

} catch (UnknownHostException e) {
System.err.println("Don't know about host: ");
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.err.println("Couldn't get I/O for the connection to: ");
System.exit(1);
}
finally {
try {
socket.close();
} catch(IOException e) {e.printStackTrace();}
}


}

}


Nello specifico, ho verificato che il client si blocca non appena faccio la chiamata --> in.readLine() (questo si verifica anche mettendo la chiamata al di fuori di un ciclo e senza fare le --> out.println per l'invio delle credenzziali).

Dove sbaglio??:confused:

Ringrazio anticipatamente chiunque possa aiutarmi nel risolvere questo problema.

Voltron
30-07-2009, 08:51
Forse gli input/output stream che vado a creare sono adatti solo per flussi di caratteri?

Voltron
30-07-2009, 10:29
socket = new Socket("10.10.15.229", 36864);

DataInputStream in = new DataInputStream(socket.getInputStream());
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

try{
char appoggio = ' ';
byte ch;
while (true) { // exception deals catches EOF
ch = in.readByte();
appoggio = (char) ch;
System.out.print(appoggio);
System.out.flush();
}
}catch (Exception e) {
e.printStackTrace();
}


Con questo pezzo di codice riesco a vedere il messaggio di ritorno del server; ma come faccio a stoppare il ciclo quando sono finiti i byte??