Conexão no Nokia S60

Fiz uma aplicação que efetua uma conexão via Socket com um servidor, envia as solicitações e recebe as informações solicitadas.

Esta aplicação funcionou perfeitamente nos emuladores da Sun, da Motorola e no Nokia S40… também funcionou nos celulares.

Porém, tanto no emulador do Nokia S60 quanto no próprio celular Nokia S60 esta aplicação não recebe as informações do servidor, alguém sabe que procedimento devo fazer para acertar isso? Já vasculhei o form nokie não encontrei nada referênte a esta particularidade do Nokia S60.

Sugestão 1 - Se vc usa várias threads, por exemplo, para rodar uma animação enquanto conecta, ou alguma outra thread, além da thread da conexão, faça um teste removendo-as e deixando apenas a thread da conexão.

Sugestão 2 - Alguns s60 tem um bug ao mostrar a mensagem perguntando se deseja usar a conexão, e qual conexão usar. É como se ele mostrasse a mensagem, mas o display não pintasse. Isso significa que a mensagem pode estar ativa na tela mas você não está vendo pois ela não é pintada pelo display. Sugiro que, assim que clicar no comando da sua aplicação que inicia a conexão, fique pressionando o joystick (FIRE), para aceitar as sugestões de conexões que ele mostrar e que talvez não esteja pintando. Pressione algumas vezes, com intervalos de 5 segundos até você ver que a conexão teve sucesso.

Espero q consiga resolver.

[quote=npereirajr]Sugestão 1 - Se vc usa várias threads, por exemplo, para rodar uma animação enquanto conecta, ou alguma outra thread, além da thread da conexão, faça um teste removendo-as e deixando apenas a thread da conexão.

Sugestão 2 - Alguns s60 tem um bug ao mostrar a mensagem perguntando se deseja usar a conexão, e qual conexão usar. É como se ele mostrasse a mensagem, mas o display não pintasse. Isso significa que a mensagem pode estar ativa na tela mas você não está vendo pois ela não é pintada pelo display. Sugiro que, assim que clicar no comando da sua aplicação que inicia a conexão, fique pressionando o joystick (FIRE), para aceitar as sugestões de conexões que ele mostrar e que talvez não esteja pintando. Pressione algumas vezes, com intervalos de 5 segundos até você ver que a conexão teve sucesso.

Espero q consiga resolver.[/quote]

Opá… Valeu pela ajuda!

Ele não usa outras Threads.

Ele mostra a menssagem, eu confirmo-a, ele abre as conexões (uso SocketConnection), envia as solicitaões para o servidor usando o OutputStream mas o InputStream não recebe nada.
Nos outros celulares, inclusive o S40 ele recebe os dados direitinho, usando a mesma aplicação sem nenhuma lateração. Esse problema acontece tanto no emulador quanto no celular real.

Tente usar a porta 80.

Porta 80… como assim?

Se for na url eu não posso, a porta que o servidor usa é outra, mas pelo que sei isso não influencia… inclusive os outros celulares recebem as informações normalmente por essa porta.

Ouvi dizer que tenho que dar o flush no OutputStream, será que esse flush influência no InputStream? Devo dar o flush antes ou depois de ler a resposta do servidor, você sabe?

Veja um exemplo que funciona no Nokia…

                httpConnection = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
                httpConnection.setRequestMethod(HttpConnection.POST);
                ... definição dos cabecalhos...
                //Envia os dados para o servidor
                outputStream = httpConnection.openOutputStream();
                outputStream.write(parametros.getBytes());
                outputStream.close();
                int resposta = httpConnection.getResponseCode();

[quote=npereirajr]Veja um exemplo que funciona no Nokia…

                httpConnection = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
                httpConnection.setRequestMethod(HttpConnection.POST);
                ... definição dos cabecalhos...
                //Envia os dados para o servidor
                outputStream = httpConnection.openOutputStream();
                outputStream.write(parametros.getBytes());
                outputStream.close();
                int resposta = httpConnection.getResponseCode();

[/quote]

Usando o HttpConnection funciona o problema era com o SocketConnection, mas consegui resolver.

Para resolver este problema eu tive que fazer o seguinte:
1 - Desabilitar o Delai do SocketConection.

SocketConnection sc = (SocketConnection) Connector.open(url);
sc.setSocketOption(SocketConnection.DELAY, 0);

2 - Chamar o flush do OutputConnection antes de ler a resposta pelo InputStream.

output.flush();
input.read();

Muito obrigado pela ajuda.

Tive o mesmo problema com o S60 e resolvi exatamente assim, fazendo o flush e mexendo nas propriedades do Socket.

MUITOOO obrigada!

:smiley: de nada. Que bom que te ajudou.