Estou com uma dificuldade na implementação de um aplicativo utilizando Socket:
Eu tenho a parte Server que recebe a conexão sem problemas.
A parte cliente possui uma interface gráfica. Este GUI quando carrega faz a conexão Socket. Até ai tudo certo.
A Interface gráfica, possui uma opção para Login, que é carregada em uma outra tela. O meu problema é, como conseguir enviar os dados(usuário e senha) para o Server, utilizando a mesma conexão Socket?
ueh, tu já não estabeleceu uma conexão com o servidor?
só utilizar ela para trasitar os dados entre o cliente e o servidor… :roll:
assim que tu carregar a aplicação ela se conecta no servidor,
estabelece a conexão, e por esta tu envia o login e senha,
caso não valide apenas volte para o cliente uma info de falha,
erro de autentificação e não habilite a outra tela, caso o login
seja aceito, volte uma resposta do servidor informando
que o login foi aceito, assim que receber esta resposta o teu
programa do cliente verificando a mesma chama a outra tela,
caso não valide fica na tela de login ainda…
O Fluxo é esse mesmo…
O meu problema é quanto ao envio de uma mensagem estado em um outro metodo… no caso a Tela de Senha…
Se eu enviar a mensagem dentro do mesmo método que fechei a conexão o sistema funciona perfeitamente… Eu não estou conseguindo é fazer que uma outra área do sistema perceba que já está conectado… Entedeu ?
public static void main(String[] args) {
TelaPrincipal aplicacao = new TelaPrincipal();
aplicacao.show();
aplicacao.statusBar.setText("Não conectado");
//Estabelece conexao com o Servidor
AbreConexao conexao = new AbreConexao(4445,"localhost");
String retorno = conexao.conectar();
//Atualiza barra de status
aplicacao.statusBar.setText(retorno);
}
Depois na tela de Login tento enviar a msg:
private JButton getButtonOk() {
if (buttonOk == null) {
buttonOk = new JButton();
buttonOk.setBounds(new java.awt.Rectangle(138,104,86,20));
buttonOk.setText("OK");
buttonOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Cria msg xml para auteticacao do usuario
CriaXML xml = new CriaXML();
xml.setTipo("autenticacao");
xml.setObjeto("usuario");
xml.setPropriedade("username","alexandre");
xml.setPropriedade("senha","pass01");
xml.fechaObjeto();
xml.fechaTipo();
// AbreConexao a = null;
// a.enviaMensagem("TESTE Conexao....");
// a.enviaXML(xml.getXML());
}
});
}
return buttonOk;
}
Então essa ultuma parte, que eu não sei como tratar… ou seja, conseguir enviar na conexão aberta anteriormente…
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - AnjoSupremo[/color][/size] :joia:
cara vi que tu está mandando uma string para um statusbar ainda… :roll:
vai uma dica, use flag…
o que seria isso, na tua classe de conexão caso conecte vai retornar
um boolean, e este será enviado e setará um flag na outra classe
que indica se está conectado ou não…
na tua classe TelaPrincipal inclua os seguintes itens:
....
private boolean conectado = false;
....
public void setConectado( boolean flag ) { this.conectado = flag; }
public boolean isConectado() { return this.conectado; }
....
private JButton getButtonOk() {
if (buttonOk == null) {
buttonOk = new JButton();
buttonOk.setBounds(new java.awt.Rectangle(138,104,86,20));
buttonOk.setText("OK");
buttonOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Cria msg xml para auteticacao do usuario
CriaXML xml = new CriaXML();
xml.setTipo("autenticacao");
xml.setObjeto("usuario");
xml.setPropriedade("username","alexandre");
xml.setPropriedade("senha","pass01");
xml.fechaObjeto();
xml.fechaTipo();
if ( isConectado() ) {
AbreConexao a
a.enviaMensagem("TESTE Conexao....");
a.enviaXML(xml.getXML());
}
}
});
}
return buttonOk;
}
na sua classe de inicialização:
public static void main(String[] args) {
TelaPrincipal aplicacao = new TelaPrincipal();
aplicacao.show();
aplicacao.statusBar.setText("Não conectado");
//Estabelece conexao com o Servidor
AbreConexao conexao = new AbreConexao(4445,"localhost");
String retorno = conexao.conectar();
//Atualiza barra de status
aplicacao.statusBar.setText(retorno);
aplicacao.setConectado( conexao.isConectado() );
}
cara observer a estrutura que tu colocou ai…
bom vi que tu abriu a conexão, mas não enviou a referencia dela
para a outra classe isso é um problema… tu vai ficar com uma conexão
aberta perdida, no outro codigo em comentado tah null no Objeto
de conexão… isso ali tambem não está legal
uma dica, tu conheçe Singleton?
aconselho a fazer um Singleton para gerenciar a tua conexão
segue um video tutorial Singleton, de uma olhada
e tente mudar o gerenciamento da conexão para este formato
acho que irá te facilitar um pouco no gerenciamento da conexão