J2ME HttpConnection getResponseCode() блокирует ожидание ответа от сервера на Nokia N97

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

Вопрос

Я загружаю файл с телефона Nokia N97 на сервер, все работает нормально, но после загрузки файла я хочу получить ответ от сервера.Проблема в том, что я получаю ответ только через полминуты или больше.Из того, что я вижу, блоки кода в HttpConnection.getResponseCode() ожидают ответа.Я протестировал это на Sony Ericsson, и я получаю ответ очень быстро, поэтому я предполагаю, что это проблема Nokia N97.(это не проблема сервера, потому что он отлично работает на других телефонах)

Кто-нибудь знает, почему это происходит только на Nokia?

Вот фрагмент кода:

общедоступный загружаемый файл() {

       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();

}

публичный 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

        }

}

Это было полезно?

Решение

Вы только думаете, что ваш файл был загружен.

Ваш вызов getResponseCode() является первым, который приводит к фактическому подключению HttpConnection к серверу.

Он не вернется до тех пор, пока не загрузит файл, что, предположительно, займет больше минуты.

Это совершенно допустимое поведение в соответствии со спецификацией HttpConnection в JSR-118:

" Следующие методы вызывают переход в состояние подключено, когда соединение находится в состоянии настройки.

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

"

Я ожидаю, что другие телефоны, на которых вы пробовали это, менее мощные, чем N97, и им необходимо очистить OutputStream, поэтому они подключаются к серверу раньше, чем должны в соответствии со спецификацией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top