J2ME HttpConnection getResponseCode () bloqueia esperando resposta do servidor no Nokia N97

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

Pergunta

I upload de um arquivo a partir de um telefone Nokia N97 para o servidor, tudo funciona bem, mas depois de arquivo é carregado eu quero obter uma resposta do servidor. O problema é que eu tenho a resposta só depois de meio minuto ou mais. Pelo que vejo os blocos de código em httpConnection.getResponseCode () à espera de resposta. Eu testei-o em um Sony Ericsson e eu recebo resposta muito rápido, então eu suponho que é um problema Nokia N97. (Não é um problema no servidor, porque ele funciona bem em outros telefones)

Alguém sabe por que isso acontece apenas em Nokia?

Aqui está um trecho 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();

}

public 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

        }

}

Foi útil?

Solução

Você só acha que seu arquivo foi enviado.

A sua chamada para getResponseCode () é o primeiro que faz com que o que realmente HttpConnection conectar ao servidor.

Ele não retornará até que ele carrega o arquivo, que, presumivelmente, leva mais de um minuto.

Este é um comportamento perfeitamente válida de acordo com a especificação HttpConnection em JSR-118:

" Os métodos seguintes provocar a transição para o estado ligado, quando a ligação é, no estado de configuração.

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

"

Espero que os outros telefones que você já tentou isso em são menos poderosos do que o N97 e necessidade de lavar o OutputStream, portanto, a conexão com o servidor antes que eles devem acordo com a especificação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top