J2ME HttpConnection blocs getResponseCode () en attente de réponse du serveur sur Nokia N97

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

Question

Je télécharge un fichier à partir d'un téléphone Nokia N97 au serveur, tout fonctionne très bien, mais après le fichier est téléchargé, je veux obtenir une réponse du serveur. Le problème est que je reçois une réponse seulement après une demi-minute ou plus. D'après ce que je vois les blocs de code dans httpConnection.getResponseCode () en attente de réponse. Je l'ai testé sur un Sony Ericsson et je reçois une réponse très rapide, donc je suppose est un problème Nokia N97. (N'est pas un problème de serveur, car il fonctionne très bien sur d'autres téléphones)

Quelqu'un sait pourquoi cette chose ne se produit que sur Nokia?

Voici un extrait de code:

UploadFile publique () {

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

}

publique 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

        }

}

Était-ce utile?

La solution

Vous pensez que votre fichier a été téléchargé.

Votre appel à getResponseCode () est la première qui provoque la HttpConnection de se connecter réellement au serveur.

Il ne reviendra pas jusqu'à ce qu'il télécharge le fichier, qui prend probablement plus d'une minute.

Ce comportement est tout à fait valable selon la spécification HttpConnection dans JSR-118:

»  Les méthodes suivantes provoquent la transition à l'état connecté lorsque la connexion est dans l'état d'installation.

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

"

J'attends les autres téléphones que vous avez essayé cela sur sont moins puissants que le besoin N97 et de vider le OutputStream donc se connecter au serveur avant qu'ils ne devraient selon les spécifications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top