(resolvido) Socket + TCP na MIDP2.0

Olá pessoal, boa noite. :slight_smile:

Estou fazendo uma conexão via socket para transmitir dados para um servidor escrito em C++,
até aí tudo bem, o problema é a forma de transmissão, o exemplo que peguei está usando UDP , mas o servidor lá só aceita de sor TCP.

segue abaixo o trecho principal do código, se alguém puder ajudar com alguma sugestão eu agradeço!

    public Form getSucesso() throws IOException {
        InputStream is;
        if (Sucesso == null) {
            // Capturar todos os dados e enviar para o servidor neste ponto
            // Se o envio correr bem mostrar tela de sucesso,
            // em caso de falha, mostrar tela para refazer envio.
            
            SocketConnection sc = null;  // Essa linha esta retornando erro de Exeption NULL !
            OutputStream os = sc.openOutputStream();
            try {
                sc = (SocketConnection) Connector.open("socket://localhost:5000");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            os.write("abbced".getBytes());
            os.flush();
            os.close();
            
            StringBuffer sb = new StringBuffer();
            is = sc.openInputStream();
            int c = is.read();
            while (c != 1)
            {
            sb.append((char)c);
            c = is.read();
            }
            Sucesso.append(sb.toString());   
            Sucesso = new Form("Sucesso", new Item[] { });
            Sucesso.addCommand(getExitCommand1());
            Sucesso.setCommandListener(this);
            // write post-init user code here
        }
        return Sucesso;
    }

Tentei alterar a forma de envio olhando alguns materiais disponiveis na net, mas não consegui acertar a sintaxe correta. :frowning:

Qualquer sugestão será muito bem vinda!

Abraços

Você já está usando TCP:

                sc = (SocketConnection) Connector.open("socket://localhost:5000");

Se vc estivesse usando UDP o código estaria assim:

                sc = (UDPDatagramConnection) Connector.open("datagram://...

Mais info sobre o GCF aqui

Seguinte,

depois de vasculhar bastante, encontrei o que eu precisava, mas ainda estou com problemas, os dados simplesmente nao sao transmitidos, sera que alguém pode dar uma luz?

segue abaixo o trecho principal do codigo

public Form getSucesso()  {
        //InputStream is;
        if (Sucesso == null) {
            // Capturar todos os dados e enviar para o servidor neste ponto
            // Se o envio correr bem mostrar tela de sucesso,
            // em caso de falha, mostrar tela para refazer envio.
            
       try{
        SocketConnection sc = (SocketConnection) 
        Connector.open("socket://201.85.45.123:6000"); // IP do servidor escutando na porta 6000
        OutputStream os = null;
        try{
        os = sc.openOutputStream();
        byte[] data = "Essa aqui eh a mensagem que eu quero enviar para o servidor! \n".getBytes();
        os.write(data);
        } finally{
            sc.close();
            os.close();
        }
        } catch (IOException x){
	x.printStackTrace();
       }

            
               
            Sucesso = new Form("Sucesso", new Item[] { });
            Sucesso.addCommand(getExitCommand1());
            Sucesso.setCommandListener(this);
            Sucesso.append("Dados enviados com sucesso");
            // write post-init user code here
        }
        return Sucesso;
    }

Alguem sabe dizer onde estou errando?

Abraços

[quote=mikius]Seguinte,
Alguem sabe dizer onde estou errando?
Abraços[/quote]

:arrow: Seu celular suporta socket ? Tem certeza ?
:arrow: O código não está gerando nenhuma exceção ? Tem certeza ?

[quote=boone]Você já está usando TCP:

                sc = (SocketConnection) Connector.open("socket://localhost:5000");

Se vc estivesse usando UDP o código estaria assim:

sc = (SocketConnection) Connector.open("datagram://... [/quote]

Boone, obrigado por responder, mas não conecta nem com reza braba!
Tanto no emulador como no aparelho celular ele exibe a mensagem que a transferencia pode ser tarifada e pede pra confirmar, eu confirmo e fica na tela “Connecting… Please Wait…”, depois de quase 1 minuto assim ele aparece tela de envio com sucesso, mas meu sniffer nao pegou nenhum dado sendo enviado!

Alguma sugestão?
Mikius

editado: sim, o celular suporta socket.

Vc deve ser novo nesta parte de usar o GCF então aqui vai a dica principal:

Toda conexão com a rede deve ser feita numa thread aparte.

Se não fizer assim, está arrumando dor de cabeça a toa.

Obrigado pela dica Boone, :slight_smile: realmente eu sou novo sim.

vou procurar saber como se inclui uma thread na conexão.

mas ainda em cima da sua dica, seria uma thread para enviar e outra para receber os dados do servidor?

vc conhece algum material na net pra me indicar?

se conhecer e puder postar o link ficarei grato! :oops:

Mikius

1 thread pros 2 é o suficiente.

[quote=mikius]
vc conhece algum material na net pra me indicar?
Mikius[/quote]

http://developers.sun.com/mobility/midp/articles/tutorial2/
http://developers.sun.com/mobility/midp/articles/midp2network/index.html

Valeu Boone, vou dar uma olhada nesse material! :slight_smile:

se surgirem duvidas volto a postar aqui!

Abraços

editado: era isso mesmo o que eu estava procurando, até tentei o site da sun, mas o site é tao confuso que nao encontrei! obrigadão! vou testar esses exemplos que tem no site!

editado de novo: Boone, seguinte,
encontrei um site onde se pode ver as especificações tecnicas de cada aparelho celular, porém segundo este mesmo site meu aparelho Não suporta socket…
J2me socket - false - generic
http://www.themobiledb.com/devs/lg_mg210_ver1.html

O profile do aparelho é CLDC 1.1 MIDP2.0
é possível que o aparelho tenha MIDP2.0 mas nao suporte socket?

Estou em dúvida sobre a integridade da informação desse site (themobile) pois eu possuo um outro aparelho
T903 da Toshiba, e nele a aplicação roda e transmite normalmente (socket), mas nesse site themobile diz que o aparelho não suporta socket.

Voce conhece algum modelo de aparelho que suporte socket?

Detalhe: no site oficial da LG, a pagina de especificação deste modelo de aparelho está em branco… :frowning: