Boas a todos…
Eu tou fazendo um cliente e um servidor multithread, e meu problema esta mais do lado do servidor, assim… Eu crio tudo o necessario, e ta correndo bem, só gostava de esperar uns segundo se o cliente cair, tipo, tentar religar o seu socket. Isso é possível?
Eu tenho o código organizado nas seguintes classes:
Server -> Só cria uma thread com o SocketServer pois isto depois é para implementar com RMI e então já dividi tudo…
SocketServer -> Thread que esta responsavel por aceitar as ligacoes
Connection extends Thread implements MsgInterface-> Threads que o SocketServer vai criar (handler das ligacoes)
MsgInterface -> É uma interface com os metodos para cada String que vai chegando com comandos ao servidor.
ServerInfo -> Classe com toda a informacao relativa ao servidor, clientes ativos, ligacoes ativas, utilizadores registados… (Isto vai ser util pq vou ter de fazer servidores de backup, e assim estes dados estao à parte)
User e Users -> Classe que serve apenas para guardar os utilizadores…
-
Em primeiro lugar, queria uma opinião acerca desta distribuição, parece legal??
-
Como faco retry à ligacao se o cliente cair? esperar 5*10s e se n voltar, fazer disconnect
-
Estou tb com problemas em manter o registo de clientes ativos e nao ativos… Saber se a ligacao acabou ou nao…
Mando um pouco do codigo da thread connection, que não é mais q um ciclo infinito a espera de mensagens para depois reagir… Este bocado é o catch no final, ou seja, se o readUTF der erro, eu vou ter de fazer a tal tentativa de reconnect e so se nao der, desligar…
catch (Exception e)
{
System.out.println("Erro readUTF: "+e);
int i;
for(i=0; i<5; i++)
{
System.out.println((i+1)+"a tentativa de restabelecer ligação!");
if(getStreams() == 0)
i = 5;
}
if(i<5)
System.out.println("Restabelecida a ligação!");
else
MsgLogout();
}
}
public int getStreams()
{
try
{
if(!clientSocket.isConnected())
clientSocket.connect(remoteSA,10);
in = new DataInputStream(clientSocket.getInputStream());
out = new DataOutputStream(clientSocket.getOutputStream());
if(clientSocket.isConnected())
return 0;
else
return -1;
}
catch(IOException e)
{
return -1;
}
}
Esta também o metodo getStreams que supostamente devolve 0 se a ligacao for restabelecida 
Coloco em anexo todo o codigo, a ver se consigo alguma ajuda… Senao um sitio onde ver exemplos ou tutoriais…
Brigadao a todos!
