J2ME HttpConnection getResponseCode () bloquea esperando respuesta del servidor en el Nokia N97

StackOverflow https://stackoverflow.com/questions/1872617

Pregunta

subo un archivo desde un teléfono Nokia N97 con el servidor, todo funciona bien, pero después de que se fichero subido Quiero obtener respuesta del servidor. El problema es que tengo la respuesta sólo después de medio minuto o más. Por lo que veo en los bloques de código httpConnection.getResponseCode () a la espera de respuesta. Lo he comprobado en un Sony Ericsson y recibo de respuesta muy rápido así que supongo que es un problema Nokia N97. (No es un problema en el servidor, ya que funciona bien en otros teléfonos)

¿Alguien sabe por qué esto sucede sólo en Nokia?

Este es un fragmento de código:

uploadfile pública () {

       httpConn = (HttpsConnection) Connector.open(url, Connector.READ_WRITE);
        ...
       //set httpConn parameters and request method 
       ...

       writeParametersAndFileName(os, "text/plain");


       **writeFileToStream(os);** 

       os.write("\r\n".getBytes());
       os.write("--".getBytes());

       os.write(boundary.getBytes());

       os.write("--".getBytes());
       os.write("\r\n".getBytes());

        *//here code blocks on Nokia N97. Same thing happens if I use os.flush() after
        // I send chunks of the file*
         .....
        codeResp = httpConn.getResponseCode();
        // check condition
        checkResponseHeader();

}

público writeFileToStream () {

        InputStream is = null;
        FileConnection c = null;
        try
        {
           c = (FileConnection) Connector.open("file:///"+ sourcePath, Connector.READ);

           if(c.exists()) {
               is = c.openInputStream();

               long fs = c.fileSize();
               while (total < fs) {
                    byte[] data = new byte[512];
                    int readAmount = is.read(data,0,512);                       
                    total += readAmount;
                    os.write(data, 0, readAmount);


            }

            //os.flush();
        }
        catch (IOException ex) {
           //               
        }
        finally
        {
           //close connection

        }

}

¿Fue útil?

Solución

Sólo se piensa que su archivo se ha cargado.

Su llamada a getResponseCode () es la primera que hace que el HttpConnection para conectar realmente con el servidor.

No volverá hasta que se carga el archivo, lo que presumiblemente lleva más de un minuto.

Este es un comportamiento perfectamente válida de acuerdo con la especificación HttpConnection en JSR-118:

"  Los siguientes métodos hacen que la transición al estado conectado cuando la conexión está en estado de instalación.

* openInputStream
* openDataInputStream
* getLength
* getType
* getEncoding
* getHeaderField
* getResponseCode
* getResponseMessage
* getHeaderFieldInt
* getHeaderFieldDate
* getExpiration
* getDate
* getLastModified
* getHeaderField
* getHeaderFieldKey 

"

espero que los otros teléfonos que han intentado esto en son menos potentes que el N97 y la necesidad de lavar el OutputStream, por lo tanto, la conexión con el servidor antes de que deberían de acuerdo con la especificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top