Problema com HttpConnection

5 respostas
P

Olá,

Estou tendo sérios problemas com o uso do HttpConnection.

O código abaixo roda perfeitamente no emulador, só que nos celulares Siemens M50 e C55, problemas acontecem, ou seja, a aplicação não consegue abrir o Stream para leitura dos dados recebidos do servidor ou mesmo logo após eu usar OutputStream.write e close, dá erro no close.

Via o emulador, o servidor entende os dados enviados por POST e envia a resposta normalmente, sendo que a aplicação em si funciona mil-maravilhas…agora quando eu coloco no celular…xiii!

Qual é a abordagem correta para fazer a conexão http sem problemas ?
Meu problema principal é no processamento da resposta.
O servidor não seta o header Content-Length, portanto de antemão, não tenho como saber quantos bytes vou ler.
Os dados recebidos são strings…como processar corretamente ? Uso só InputStream ou DataInputStream ?
Este código está sendo executado em uma thread separada.
O que pode ser melhorado neste códi

5 Respostas

IvoD

Caro Boone,
Com o meu celular eu tenho primeiro que conectar o GSM para depois iniciar os testes…
O seu celular esta conectado?

P

Conectado ?

Ele está sempre, afinal, usa o GRPS.
Até existe um termo para isto (Always on) que descreve, dispositivos que estão sempre conectados a internet, seja um micro desktop via Speedy, seja um celular GSM,etc…

Eu não tenho problemas na conexão, postagem de parâmetros e início do recebimento dos dados.

O que acontece é que os dados que recebo, após um determinado período (coisa de segundos), faz me crer que fico preso no loop do método read(), pois a aplicação não consegue entender que não há mais nada para ser lido, ficando aguardando o servidor enviar dados que na verdade não existem mais para serem enviados.

Estou fazendo alguns testes, mas ainda não entendo porquê a conexão entra no while, mas não sai…e isto só acontece quando faz uma segunda conexão postando outros parâmetros e desta vez recebendo uma quantidade grande de dados.

Enfim, ainda estou na luta !

P

Apenas para enriquecer a discussão:

Eventualmente a conexão se encerra normalmente.

Noto que isto acontece quando recebo poucos bytes, algo em torno de 900…Se eu receber mais do que istoa aplicação não sai mais do while…

Seria um problema na implementação MIDP do celular ?

Estou no meu script PHP setando o header “Content-Length” corretamente, para que a aplicação saiba que terá uns 4Kb para receber de dados.

Também já tentei usar o header “Connection: close”, mas em nada ajudou.

No emulador roda que é uma beleza, não importa a quantidade de bytes que receberei do servidor, agora quando rodo no aparelho…

jluizsc

Ola,
Com o meu palm m105 e KVM da palm dah esse erro tb… mensagem:

erro na transmissao:javax.microedition.io
ConnectionNotFoundException:The requested
protocol does not exist socket://meuip:8080

url sendo para acesso: http://meuip:8080/servlet/ccApl
o comando de acesso ao servlet funciona perfeitamente no IE e no POSE

:frowning:

mas no palm real, necas!! a rom do pose eh a mesma versao do palm

jluizsc

Boone,
nao sei se isso vai te ajudar… nao tive tempo de ler seu codigo completamente, mas segue o q uso para ler os dados. AINDA nao deu problema:

private String ProcessaRespostaServidor(HttpConnection srv, InputStream iStrm) throws IOException {
    String str = "";
        int tamanho = (int) srv.getLength();
        if (tamanho != -1) {
            byte dados[] = new byte[tamanho];
            iStrm.read(dados);
            str = new String(dados);
        } else {
            ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
            int ch;
            while ((ch = iStrm.read()) != -1)
                bStrm.write(ch);
            str = new String(bStrm.toByteArray());
            bStrm.close();
        }
    return str;
}

falow

Criado 28 de abril de 2004
Ultima resposta 20 de mai. de 2005
Respostas 5
Participantes 3