Autore Topic: Telnet Server / gestire richieste multiple  (Letto 670 volte)

Offline oktogon

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 10
Telnet Server / gestire richieste multiple
« il: 03 Aprile 2016, 00:16:55 CEST »
0
Salve,
La mia app si connette ad un telnet server.
Con la connessione socket attiva l'app manda dei comandi e deve leggere le risposte con readline.
Il problema è che l'app invia una serie di richieste ed ogni richiesta deve ricevere la sua risposta specifica.
Non riesco a recuperare la risposta giusta e ovviamente l'app non interpreta correttamente ciò che riceve.
Come posso fare ??

Questo è il codice:
Codice (Java): [Seleziona]
public static String TelnetCMD(String CMD) {
 
        StrictMode.ThreadPolicy policy = new
                StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
 
        try {
 
            String str = CMD;
 
            try {
                socket.connect(sockaddr, 1000);
                Log.e("socketConnect: ", "connetti");
 
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("socketConnect: ", "Catch (già connesso)");
            }
 
            PrintWriter out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream())),
                    true);
 
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 
           out.println(str);
 
            cmd_inviato = in.readLine();
 
            Log.e("SCSMSG_SENT", str) ;
 
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("SCSMSG_SENT", " error") ;
        }

ho provato anche così ma senza risultati:
Codice (Java): [Seleziona]
public static String TelnetCMD(String CMD) {
 
       StrictMode.ThreadPolicy policy = new
               StrictMode.ThreadPolicy.Builder()
               .permitAll().build();
       StrictMode.setThreadPolicy(policy);
 
       try {
 
 
           final String str = CMD;
 
 
           try {
               socket.connect(sockaddr);
 
               //ServerSocket socket = new ServerSocket();
 
               //socket.bind(sockaddr, 10);
 
 
 
               Log.e("socketConnect: ", "connetti");
 
           } catch (Exception e) {
               e.printStackTrace();
 
               Log.e("socketConnect: ", "Catch (già connesso)");
 
           }
 
 
 
 
 
 
           final PrintWriter out = new PrintWriter(new BufferedWriter(
                   new OutputStreamWriter(socket.getOutputStream())),
                   true);
 
 
 
           final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 
 
 
 
 
               new Thread() {
                   public void run() {
                       GetRecentContextCall.Response r;
                       synchronized(socket) {
                           out.println(str);
 
                           
 
                           try {
 
                               cmd_inviato = in.readLine();
                             
                           } catch (IOException e) {
                               e.printStackTrace();
                           }
 
                       }
                       // Process response
                   }
               }.start();
      //     }
 
 
 
 
 
           Log.e("SCSMSG_SENT", str) ;
 
 
 
 
 
 
 
 
       } catch (Exception e) {
           e.printStackTrace();
           Log.e("SCSMSG_SENT", " error") ;
 
 
       }
 
 
       Log.e("SCSMSG_RCV", cmd_inviato) ;
 
       return cmd_inviato;
 
 
 
 
 
 
 
 
 
 
 
   }

Offline oktogon

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 10
Re:Telnet Server / gestire richieste multiple
« Risposta #1 il: 05 Aprile 2016, 08:06:33 CEST »
0
Nessun suggerimento ???

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Telnet Server / gestire richieste multiple
« Risposta #2 il: 05 Aprile 2016, 08:11:09 CEST »
0
Errori ? Log?

Offline oktogon

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 10
Re:Telnet Server / gestire richieste multiple
« Risposta #3 il: 05 Aprile 2016, 08:15:41 CEST »
0
Nessun errore per adesso.
Accade ciò che non dovrebbe.
Le risposte ai comandi telnet 'si confondono' ... ovvero non riesco ad isolare e a far corrispondere ad una domanda la propria risposta.
Chiedevo suggerimenti su come fare in modo che ogni comando inviato attraverso il socket fosse 'isolato' dagli altri, probabilmente in un thread specifico ???

Scusate la terminologia, ma sono un neofita ...

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Telnet Server / gestire richieste multiple
« Risposta #4 il: 05 Aprile 2016, 08:19:30 CEST »
0
Devi usare thread normali. Mi sembra strano. Finché non hai una risposta non dovresti avviare un altro thred per un altra richiesta

Offline oktogon

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 10
Re:Telnet Server / gestire richieste multiple
« Risposta #5 il: 05 Aprile 2016, 10:40:11 CEST »
0
Possono partire più richieste, a distanza di secondi.
Il server risponde immediatamente ma non sono sicuro che lo faccia prima della risposta.
Come potrei risolvere ??
Posso accodare le richieste in una coda ??

grazie per i suggerimenti ...

Devi usare thread normali. Mi sembra strano. Finché non hai una risposta non dovresti avviare un altro thred per un altra richiesta