Socket e J2ME

Olá Galera!

É possivel transmitir uma String via Socket de um celular para um servidor?
Utilizo MIDP2.0…

A conexão entre o celular e o Servidor é estabelecida(socket), mas qnd envio uma mensagem do cel para o server, ocorre o erro no servidor:

java.io.StreamCorruptedException: invalid stream header
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:737)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
	at br.com.renan.server.Server.run(Server.java:48)
	at java.lang.Thread.run(Thread.java:534)

Trecho principal do código do server:


		try {
			server = new ServerSocket(5001, 10);
			System.out.println("Servidor criado");
			
			while(true){
				System.out.println("Escutando a porta");
				sct = server.accept();
				System.out.println("Conexao Estabelecida!!!");

				System.out.println("Criando o fluxo de entrada...");
				in = new ObjectInputStream(sct.getInputStream());
				System.out.println("Fluxo Criado!");
				
				while(!mensagem.equals("fim")){
					mensagem = (String) in.readObject();
					System.out.println(mensagem);
				}
			}
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}

Valeu!

pelo q eu vi no servidor vc ta usando ObjectInputStream e no cliente j2me provavelmente esta usando outro tipo de fluxo. Tenta usar manipulaçao de arquivos compativeis, ou seja, no servidor usa manipulaçao soh de string por exemplo.

falou

Ola, sou programador java e estou querendo comecar com mobile , percebi q voces ai em cima
sabem usar isso, tem algum tutorial alguma coisa pra quem esta comecando com celular?

valew

Utilize o SocketConnection:

SocketConnection sc = (SocketConnection)
Connector.open("socket://host.com:79");
sc.setSocketOption(SocketConnection.LINGER, 5);
InputStream is = sc.openInputStream();
OutputStream os = sc.openOutputStream();
os.write("\r\n".getBytes());
int ch = 0;
while(ch != -1) {
ch = is.read();
}
is.close();
os.close();
sc.close();

Fernando

Kra necessariamente vc precisa de Socket?
Se nao faz uma conexao HTTP com HttpConnection abre um DataInputStream para receber dados do servidor.

[quote=Sagatiba]Kra necessariamente vc precisa de Socket?
Se nao faz uma conexao HTTP com HttpConnection abre um DataInputStream para receber dados do servidor.[/quote]

Sagatiba, estou com o mesmo problema do amigo ai em cima,
porém, vi num site de especificações de aparelhos que o aparelho que eu estou usando não aceita socket:
http://www.themobiledb.com/devs/lg_mg210_ver1.html
J2me socket false generic

O aparelho é MIDP2.0 CLDC1.0, eu sei que a partir da MIDP2.0 se faz uso de Socket, mas pode acontecer o aparelho suportar MIDP2.0 e não ter suporte à SOCKET?

caso sim, qual seria a alternativa de transmitir uma string?
exemplo: “mensagem que quero enviar ao servidor”;

Abraços

Kra esses lg MG…
Sao um problema… As VMs antigas da LG eram um &%&$*. Pior do qi elas so Siemens.
Qndo c le a especificacao da JSR118, SocketConnection so aparece a partir de Midp2.0.
E como eu odeio essas VM da lg antiga (os novos celulares tem Vm que prestam…)
Nao duvido nada que tenham bugs de implementacao e alem disso nao seguirem o padrao Sun.
Como SocketConnection faz parte do Generic Connection framework e vc usa uma factory para pegar as conexoes (Connector.open(url)), se o celular nao suporta SocketConnection ele lanca a seguinte excecao ConnectionNotFoundException.
Se nao lancou ai, entao suporta.

Agora minha duvida eh, pra quer usar Socket?
Tem alguma necessidade, um protocolo especial de mensagem? Ou so troca de dados, pq se nao? Usa uma Servlet no servidor e uma HttpConnection ou HttpsConnection no celular, e manda as mensagens via parametro e recebe os dados do servidor via DataInputStream.

Qndo der tempo escrevo um tutorial.

Sagatiba,

obrigado pela sua sugestão,

bom, a necessidade do protocolo existe sim, pois o Servidor já funciona com outras aplicações desktop e foi escrito em outra linguagem (C++) .
eu também cheguei a duvidar que este aparelho suportasse socket, mas ele não causou exception em (ConnectionNotFoundException), então fui com perseverança (rs).

Felizmente eu consegui resolver o problema.

O problema nada mais era, do que configurar um profile no aparelho para conexao de dados via GPRS para o app java. (parece besteira ne)

O problema todo é que o aparelho conectava via browser normalmente, então automaticamente pressupomos que o app Java tambem vai se conectar.
(nem o suporte tecnico da LG conseguiu me esclarecer isso por telefone)

Mas enfim, depois de criar um profile e definir as APN da operadora e definindo-as como padrão minha app funfou :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :).

De qualquer forma, valeu pela força.

Abraços

Olha…
Estou com o mesmo problema do renandpf.
O meu celular aqui consegue se conectar com o servidor via socket, mas quando eu tento enviar uma String ou qualquer outro arquivo, dá erro:

java.io.StreamCorruptedException: invalid stream header: 54657374

Como poderia resolver??

Pessoal sou novo em Java e estava querendo desenvolver um programa que faça a comunicação entre um celular e um servidor tipo tenho alguns dados no cel e quero passar para o PC. Tem alguma apostila ou algo parecido para iniciantes?
Muito obrigado.

Ola…

Preciso de algum material ou ajuda referente a como fazer a comunicação entre o celular e o pc… Tipo assim

tenho os dados no celular salvo em rms e aí quero enviar os mesmos para o computador ?

alguem poderia me ajudar…

valeu

pra mim isso é mt mas mt importante…

[quote=josejorgejr]pelo q eu vi no servidor vc ta usando ObjectInputStream e no cliente j2me provavelmente esta usando outro tipo de fluxo. Tenta usar manipulaçao de arquivos compativeis, ou seja, no servidor usa manipulaçao soh de string por exemplo.

falou[/quote]

Como saber qual tipo de FLUXO um socket cliente está utilizando ?

[quote=leandromarrom][quote=josejorgejr]pelo q eu vi no servidor vc ta usando ObjectInputStream e no cliente j2me provavelmente esta usando outro tipo de fluxo. Tenta usar manipulaçao de arquivos compativeis, ou seja, no servidor usa manipulaçao soh de string por exemplo.

falou[/quote]

Como saber qual tipo de FLUXO um socket cliente está utilizando ?[/quote]

Fluxo não tem tipo, em resumo, não há como. Lembre-se, fluxo é fluxo e nada além disto.

Cara eu to com o seguinte problema tenho um servidor socket TCP… porem os clientes não envia o caracter de fim de linha " \r\n "

como fazer para coletar as informações que o cliente está enviando ?

[quote=leandromarrom]Cara eu to com o seguinte problema tenho um servidor socket TCP… porem os clientes não envia o caracter de fim de linha " \r\n "

como fazer para coletar as informações que o cliente está enviando ?
[/quote]

Sua pergunta é muito estranha, porquê qualquer um que saiba o básico de socket, sabe que se você tem um servidor, e o cliente conecta nele, você já vai estar coletando o que ele está enviando ! Isto é lógico ! :roll:

Boa tarde,
estou testando o socket do J2ME comunicando com um servidor desenvolvido em VB.NET.
Ocorre o seguinte problema:
O servidor comunica perfeitamente quando com o cliente J2ME quando o mesmo é rodado no emulador. Quando carrego o programa em um Nokia E62, a conexão com o servidor ocorre normalmente, porém não consigo enviar os dados.
Não creio que seja problema com o código pois no emulador funcionou perfeitamente. Alguém poderia me dar uma ajuda?

Obrigado

[quote=rlilla]Boa tarde,
estou testando o socket do J2ME comunicando com um servidor desenvolvido em VB.NET.
Ocorre o seguinte problema:
O servidor comunica perfeitamente quando com o cliente J2ME quando o mesmo é rodado no emulador. Quando carrego o programa em um Nokia E62, a conexão com o servidor ocorre normalmente, porém não consigo enviar os dados.
Não creio que seja problema com o código pois no emulador funcionou perfeitamente. Alguém poderia me dar uma ajuda?

Obrigado[/quote]

estou exatamente com o mesmo problema.

mas o servidor é em java mesmo, o cliente em J2me.
O celular q estou testando é um Nokia E63.

No emulador, conecta e troca arquivos tranquilamente.

No celular, ele efetua a conexão, mas quando envio um arquivo, ele trava o servidor na leitura do socket (input.read()).

Alguem faz ideia do que pode ser?

tudo bem pessoal!

Eu estou tendo um problema parecido com este! fiz uma aplicação cliente/servidor em j2me…que funciona bem sem nenhum problema no computador usando netbeans e o emulador wireless toolkit…mas ponho a aplicação no celular ele abre a conexão ,aceita a conexão…mas só aceita enviar a msg do client ao servidor, e o servidor não consegue mandar a msg para o cliente… alguém pode ajudar-me com isso?

se tiverem usando outputstream no celular tentem usar DataInputStream pra ver se resolve.