Testar se socket está conectado

1 resposta
A

Olá pessoal.

Seguinte…

Tenho uma app mobile que roda em aparelhos Nextel.
Por causa da Nextel só oferecer IP NAT aos aparelhos e eu não querer gastar com SMS
para acordar as aplicações pelo PushRegistry…

A seguinte situação…

Tenho um Servidor de aplicações em Delphi… Que é meu servidor socket…
O mobile, ao iniciar, se registra nesse servidor socket e fica aguardando mensagens dele!

Ou seja, “emulei” um falso PushRegistry…

public void regitrarClientSocket() throws IOException{

sc = (SocketConnection) Connector.open(socket://IpDoServidorSocket:40000”);

sc.setSocketOption(SocketConnection.LINGER, 5);
is = sc.openInputStream();
  os = sc.openOutputStream();
  os.write(LoginUsuario.getBytes());

}

public class escutarSocket extends Thread {

public void run(){        int ch = 0;

while(ch != -1) {

try {

ch = is.read();

} catch (IOException ex) {

ex.printStackTrace();

}

resumeRequest();

startApp();

msg(Algo vindo da web);

display.setCurrent(formMaim);

}

}

}

e no StartApp() tenho

if(!ConectadoAoServidor){

try {

regitrarClientSocket();

ConectadoAoServidor = true;

} catch (IOException ex) {

ex.printStackTrace();

}

}

//Verificar a cada X minutos se usuário está conectado

escutarSocket doIt = new escutarSocket();

Thread myThread = new Thread( doIt );

myThread.start();

Mas tenho uma dúvida… A conexão do servidor ou do celular pode cair…
Então vou criar um timer que verifica de tempos em tempos se o socket ainda está conectado…
Ai está a questão…

Como faço para saber se esse cliente socket Sc que criei, ainda está conectado.
Qual metodo utilizar?

teria algum sc.IsConected() ???/

valew!

1 Resposta

ricoldi

Que eu saiba Socket em CLDC não possui essa verificação.

Tenta dar um:

writeInt(1);

e no cliente um

int e = readInt();
if (e == 1){
    sout("conectado!");
}

Acho que é o jeito mais garantido de saber se a conexão ainda esta aberta.

Criado 8 de outubro de 2009
Ultima resposta 8 de out. de 2009
Respostas 1
Participantes 2