Autore Topic: Problema con Socket Client  (Letto 570 volte)

Offline Daag

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Ubuntu 10.10
Problema con Socket Client
« il: 26 Agosto 2013, 15:39:55 CEST »
0
Salve a tutti,  :-)

in questi giorni sto sviluppando un'applicazione per far dialogare l'applicazione Android con un socket server che gira sul pc.

Ho riscontrato alcuni problemi, un'activity lancia un'AsyncTask contentente l'inizializzazione del socket client, le istruzioni per connettersi e dialogare. il problema che il socket si connette solo se lancio l'applicazione in debug-mode altrimenti non si connette. è una cosa un pò strana.. il codice non ritorna nessun errore dal Logcat, non so se pianti o vada in loop (non riesco ad accedere a questa parte di codice col debug) sicuramente avrò sbagliato qualcosa, posto il codice nel caso qualcuno possa aiutarmi:

Codice (Java): [Seleziona]
public class ConnectionSocket extends AsyncTask{
    private String user;
    private String pass;
    private Socket server;
    private PrintWriter out;
    private BufferedReader in;
    private boolean connected;
    private boolean logged;

    public ConnectionSocket(String user, String pass, TextView[] mess )
    {
        this.user = user;
        this.pass = pass;
        this.mess = mess;
        connected = false;
        logged = false;
    }


    @Override
    protected Object doInBackground(Object[] objects) {

        android.os.Debug.waitForDebugger();

        boolean status;
        connected = connect();

        if(connected)
        {
            logged = login(user, pass);
        }

        status = connected && logged;
        return status;
    }

    public boolean connect()
    {
        try
        {
            Thread.sleep(2000);
            server = new Socket(serverName, port);
            out = new PrintWriter(server.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(server.getInputStream()));
            connected = true;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        if(connected)
        {
            try {
                Thread.sleep(1000);
                out.println(greetings);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return connected;
    }


lo lancio così:
       
Codice (Java): [Seleziona]
connSocket = new ConnectionSocket(user, pass);
connSocket.execute();

grazie in anticipo.
« Ultima modifica: 26 Agosto 2013, 15:44:59 CEST da Daag »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con Socket Client
« Risposta #1 il: 26 Agosto 2013, 15:53:08 CEST »
0
Prova a mettere un po' di Log.d() lungo il percorso di esecuzione. Per capire da dove effettivamente passa e dove eventualmente si ferma.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daag

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Ubuntu 10.10
Re:Problema con Socket Client
« Risposta #2 il: 26 Agosto 2013, 16:37:58 CEST »
0
Basta mettere un
Codice (Java): [Seleziona]
Log.d("Tag", "Messaggio");dove mi serve? questi messaggi li trovo nel logcat? ho provato ma non trovo nulla .. se li filtro per il "Tag"?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con Socket Client
« Risposta #3 il: 26 Agosto 2013, 16:46:23 CEST »
0
Basta mettere un
Codice (Java): [Seleziona]
Log.d("Tag", "Messaggio");dove mi serve? questi messaggi li trovo nel logcat? ho provato ma non trovo nulla .. se li filtro per il "Tag"?

Si, i messaggi generati con Log.d() appaiono nel LogCat (quelli .d() come DEBUG, ma ci sono anche .e() per ERROR e così via).

Per verificare di aver scritto tutto correttamente, mettine uno nella onCreate(), così sai per certo che dovrà uscire.

Poi per capire dove nasce il tuo problema, comincia a metterli lungo il percorso di esecuzione incriminato. Per esempio uno subito all'inizio della doInBackground(), così verifichi che parta. E poi vai avanti aggiungendone altri sino ad individuare il problema.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daag

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Ubuntu 10.10
Re:Problema con Socket Client
« Risposta #4 il: 26 Agosto 2013, 17:14:27 CEST »
0
Per caso devo aggiungere altro da qualche altra parte? Forse un permesso nel Manifest?
Ho fatto come hai detto tu ma non vi è traccia nel logcat di quei messaggi, ho usato
Codice (Java): [Seleziona]
Log.e("Messaggio utente", "Created");in modo che fossero pure segnalati in rosso  com errori e più visibili. non è possibile che non passi nell'onCreate dove l'ho messo altrimenti non si avvierebbe neanche quindi forse sbaglio qualcos'altro.. ma non c'è un modo per debuggare un AsyncTask? ho aggiunto anche
Codice (Java): [Seleziona]
android.os.Debug.waitForDebugger();all'inizio di doInBackground ma nada de nada. Come IDE uso jetbrains-android-studio

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema con Socket Client
« Risposta #5 il: 26 Agosto 2013, 21:01:49 CEST »
0
Hai fatto caso al fatto che waitForDebugger è bloccante? Nel senso che il tuo codice rimane bloccato su quella istruzione fino a quando non viene "agganciato" il debugger.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con Socket Client
« Risposta #6 il: 27 Agosto 2013, 09:35:51 CEST »
0
Per caso devo aggiungere altro da qualche altra parte? Forse un permesso nel Manifest?
Ho fatto come hai detto tu ma non vi è traccia nel logcat di quei messaggi, ho usato
Codice (Java): [Seleziona]
Log.e("Messaggio utente", "Created");in modo che fossero pure segnalati in rosso  com errori e più visibili. non è possibile che non passi nell'onCreate dove l'ho messo altrimenti non si avvierebbe neanche quindi forse sbaglio qualcos'altro.. ma non c'è un modo per debuggare un AsyncTask? ho aggiunto anche
Codice (Java): [Seleziona]
android.os.Debug.waitForDebugger();all'inizio di doInBackground ma nada de nada. Come IDE uso jetbrains-android-studio

Non riuscire a interagire con il LogCat è un grosso problema, dato che è lo strumento principale di debug. Purtroppo non conosco l'IDE che stai usando e non so come aiutarti nello specifico, però è abbastanza evidente che prima di tutto devi risolvere il problema del LogCat, poi potrai fare debug della tua app.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daag

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Ubuntu 10.10
Re:Problema con Socket Client
« Risposta #7 il: 27 Agosto 2013, 18:32:24 CEST »
0
Ho sempre programmato in Java con Eclipse e non ho mai avuto problemi con i log. Più che inserire quell'istruzione..
Potrebbe essere l'IDE (ho dovuta cambiarla causa formattazione) che non avendola mai usata prima ha qualche impostazione sbagliata nel leggere i Log..
Dato che non è la prima volta che non mi ritorna nessun messaggio di Log nello specifico della mia applicazione e ricompilando riappaiono tutti. Proverò a cambiare IDE.

Comunque sia il problema si presenta in maniera minore non usando un AsyncTask ma mettendo le istruzioni papali papali nel UI Thread (si collega ma scrive nel buffer con un ritardo spaventoso) probabile sia un problema di versione dell'SDK

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con Socket Client
« Risposta #8 il: 27 Agosto 2013, 19:00:46 CEST »
0
Beh, di sicuro i Thread.sleep() sono ritardi voluti e dovrebbero essere tolti del tutto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daag

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Ubuntu 10.10
Re:Problema con Socket Client
« Risposta #9 il: 27 Agosto 2013, 22:03:25 CEST »
0
si perchè eseguiva troppo velocemente e usavo delle textview per indicare a che punto del collegamento era (connessione, username, password..) e la UI non riusciva ad aggiornarsi così velocemente. In totale dovrebbe ritardarsi di 5-6 secondi, invece ci mette più di un minuto