Autore Topic: Socket non bloccante  (Letto 551 volte)

Offline Sethi

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung P1000
  • Sistema operativo:
    Mac OS X 10.6.7
Socket non bloccante
« il: 04 Maggio 2011, 21:16:43 CEST »
0
Ciao! Una parte della mia app contiene un socket tcp/ip. questo socket deve connettersi in remoto ad un serve e scambiare dei dati. L'invio dei dati funziona, ma la ricezione mi da problemi. Il socket è contenuto in un thread ed ho bisogno che la ricezione non sia di tipo "bloccante". Ho provato con questo cercando un po' in rete:

Codice: [Seleziona]
                            ByteBuffer incomingLengthInBytes = ByteBuffer.allocate(4); // size of an 'int'
                           
                            socketChannel.read(incomingLengthInBytes);
                           
                            incomingLengthInBytes.rewind();
                           
                            int incomingLength = incomingLengthInBytes.getInt();
                           
                            if (incomingLength > 0)
                            {
                                    inviaToast("Got Incoming Length as: " + incomingLength + " bytes");
                           
                                    // now allocate the correct size for the message...
                                    ByteBuffer incomingData = ByteBuffer.allocate(incomingLength);
                           
                                    socketChannel.read(incomingData);
                           
                                    incomingData.rewind();
                           
                                    incomingData.get(bustaRicevuta.pacchetto);
                                    bustaRicevuta.lenPacchetto = incomingLength;
                            }


Il socket non è bloccante e tutto sembra funzionare, ma quando arrivano effettivamente dei dati, la variabile incomingLenght contiene un numero da fantascienza invece che la vera quantità di dati nel socket...

Qualche suggerimento? Alternative per un metodo non bloccante che funzioni? Bye bye :)