Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Server java, problema col metodo readLine()

    Salve a tutti, ho un problema e credo di avere individuato la causa del malfunzionamento ma non riesco a risolverlo.
    Sto progettando un server java che riceve delle soket da un client il quale è già in funzione, non l'ho progettato io e di conseguenza non posso modificarlo.
    Il server si blocca nel momento in cui vado a leggere il contenuto del BufferedReader attraverso il metodo readLine().
    Credo che il problema sia nel fatto che la stringa inviata dal client non termina con il carattere "new line" e questo fa crashare il server.
    Ritengo che la causa sia questa perchè ho provato a creare un client ad hoc e se la stringa che faccio inviare non termina con newline il comportamento del server rimane invariato, ovvero si blocca.
    So per certo che la stringa inviata dal client termina col carattere "}", quindi vorrei sapere se si può fare in modo di leggere il BufferReader affinché venga letta la stringa che termina con } e non con "newline" o se ci potrebbero essere altre soluzioni alternative.

    ecco il codice nella parte relativa alla gestione della lettura del buffer

    codice:
            try (PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    BufferedReader in = new BufferedReader(new InputStreamReader(
                            socket.getInputStream()));) {
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    // do something
                }
                socket.close();
            }
    spero di essere stato chiaro, grazie in anticipo per eventuali suggerimenti

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Giustamente il metodo readLine() legge una riga (terminata da \n o \r\n.)
    Per leggere qualsiasi cosa prova il metodo read().
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    perfetto grazie, ho risolto utilizzando la lettura del buffer per carattere e fermando la lettura fino al carattere di fine da me scelto

    codice:
    final char endMarker = '}';
    StringBuilder messageBuffer = new StringBuilder();
    int value;
    while ((value = in.read()) != -1) {
        char c = (char) value;
        if (c == endMarker) {
            inputLine= messageBuffer.toString();
            messageBuffer.setLength(0);
             //do something with inputLine
        else {
            messageBuffer.append(c);
        }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.