Dúvida sobre Socket

6 respostas
A

Pessoal,

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?

Por favor, agradeço se alguém puder me ajudar.

[]s

6 Respostas

E

opa beleza?

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…

seria essa a ideia do fluxo :wink:

A

Blz Erko,

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 ?

E

bom…
entendi sim…

mas como você está chamando a outra área do sistema após o login?
você simplesmente chama? envia algum parametro?

:roll:

A

Na tela Principal tenho esse código:

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:

E

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 :wink:

A

Erko,

Muito Obrigado pelas dicas.
Vou trabalhar na implementação das sugestões.

[]s

Criado 21 de maio de 2006
Ultima resposta 21 de mai. de 2006
Respostas 6
Participantes 2