Galera to fazendo um trabalho da faculdade que basicamente é fazer um chat multi-usuario com interface swing simples, mais estou tendo algumas duvidas não se estou fazendo da maneiro correta,
//essa é a classe responsavel por comunicar a aplicação com o servidor
package br.com.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import br.com.domain.Usuario;
public class ConectarServidor {
private static Socket socket = null;
private static boolean isError = false;
public static void RealizarCadastro(Usuario usuario) throws Exception {
enviarRequisicao("registro", usuario);
}
private static Socket getSocket() throws Exception {
if (ConectarServidor.socket == null) {
ConectarServidor.socket = new Socket("127.0.0.1", 5555);
}
return ConectarServidor.socket;
}
private static void enviarRequisicao(String action, Object object) throws Exception {
//Instancia do atributo saida, obtem os objetos que permitem controlar o fluxo de comunicação
Socket socket = getSocket();
PrintStream saida = new PrintStream(socket.getOutputStream());
saida.println(action); //envia para o servidor qual ação ele vai executar
realizarAcao(action, object, saida);
}
private static void realizarAcao(String action, Object object, PrintStream saida) throws Exception {
Socket socket = getSocket();
BufferedReader entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//realiza a ação
if (action.equals("registro")) {
Usuario usuario = (Usuario) object;
String registro = "nickName:"+usuario.getNome() + "," + "senha"+":"+usuario.getSenha();
saida.println(registro); //aqui envia para o servidor o registro do usuario
// isError --> minha duvida é nesse ponto eu preciso que o servidor me retorne se deu ou não certo o que eu mandei ele fazer
String response = entrada.readLine();//aqui ele pega a mensagem do servidor
throw new Exception(response); // manda pra aplicação a resposta
}
}
}
//aqui é a classe do servidor
package br.com.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ServidorSocket extends Thread {
private Socket conexao;
public ServidorSocket(Socket socket) {
this.conexao = socket;
}
public static void main(String args[]) {
try {
ServerSocket server = new ServerSocket(5555);
System.out.println("ServidorSocket rodando na porta 5555");
while (true) {
Socket conexao = server.accept();
Thread t = new ServidorSocket(conexao);
t.start();
}
} catch (IOException e) {
System.out.println("IOException: " + e);
}
}
public void run() {
try {
verificarAcao();
} catch (IOException e) {
System.out.println("Falha na Conexao... .. ." + " IOException: "
+ e);
} catch (Exception e) {
System.out.println("erro");
}
}
public void verificarAcao() throws Exception {
PrintStream saida = new PrintStream(this.conexao.getOutputStream());
BufferedReader entrada = new BufferedReader(new InputStreamReader(this.conexao.getInputStream()));
//pega a ação
String action = entrada.readLine();
if (action.equals("registro")) {
String registro = entrada.readLine();
String[] user = registro.split(",");
String nickName = user[0].split(":")[1];
if (verificarDisponibilidadeUsuario(nickName)) {
//inserir no banco; FIXME
saida.print(false); //manda false para a aplicação informando que não ocorreu erro;
saida.println("Registro Salvo!");
} else {
saida.print(true);
saida.println("Nome de usuario invalido!\nEscolha outro!");
}
}
this.conexao.close();
}
public boolean verificarDisponibilidadeUsuario(String nickName) {
//inserir aqui uma consulta verificando o nome do usuario FIXME
return true;
}
}
se puderem me dar a opinião de vc’s de como melhorar esse código ou de uma forma melhor de fazer.