//dentro do metodo run()
if(socket.isClosed()){
JOptionPane.showMessage(null, "Usuario já logado!!");
}else{
inciaPrograma();
}
Pelo lado do servidor este erro:
java.io.StreamCorruptedException:
Pelo lado do usuário não inicia o método InciaPrograma() mas aceita a conexão.
E se abro outa janela (usuário) para tentar outra conexão retorna: “Software caused connection abort: rcv failed”.
Não queria ser chato, mas como já vi gente ser despedida por encapsular um ObjectInputStream/ObjectOutputStream em um Socket, eu aconselharia a tentar uma outra solução. É que há vários problemas com esse encapsulamento.
Veja se você não está precisando dar “shutdown” no socket , além de dar um “flush”.
M
mrsmylle
Sem problema!!Quando tento logar com mesmo usuário on-line dá isso:
java.lang.NullPointerException;
E inicia a aplicação. A condição é essa:
if(!conexao.isConnected()){JOptionPane.showMessageDialog(null,"Usuario já cadastrado!!","Erro!",JOptionPane.ERROR_MESSAGE);fLogin.requestFocus();}else{setVisible(false);newIMPrincipal().setVisible(true);}
O Servidor recusa o usuário, mas o mesmo é conectado!!
M
mrsmylle
E pelo servidor a condição é essa:
//uOn- usuário já´onlineif(uOn){input.close();output.close();socket.shutdownInput();socket.shutdownOutput();socket.close();}else{dlm.addElement(msg.getDUsu().getLogin());mUsuarios.put(msg.getDUsu(),socket);aMsgs.append(msg.getDUsu().getLogin()+" acabou de entrar!\n");}
Quando você encapsula uma XOutputStream em outra YOutputStream, quando você fecha a mais externa, são fechadas as mais internas (por exemplo, encapsular um ObjectOutputStream em um SocketOutputStream, e você fechar o ObjectOutputStream, acaba fechando o socket primeiro. Então você deve dar o shutdown no socket ANTES de fechar o ObjectOutputStream, senão vai tentar dar um shutdown em um socket que já está fechado.
M
mrsmylle
java.io.EOFException!
Que um fim de arquivo ou stream foi alcançado inexperadamente durante o input!