Estou com o seguinte problema, o código do servidor q postei e o do cliente funcionam. Mas fica extremamente lento, e quanto mas clientes entram uma nova thread é criada com um loop infinito verificando se chegou uma nova mensagem e encaminha para todos os outros clientes, e se houver mensagens após 10 segundos são apagadas.
Quem puder dar uma dica, como melhorar isto, ou uma nova ideia para refazer tudo de uma maneira melhor…
[code]public class Server {
public static void main (String [] args)
{
try
{
ServerSocket servSock = new ServerSocket(3292);
ArrayList<Mensagem> mensagens = new ArrayList<Mensagem>();
ThreadApagaMensagens a = new ThreadApagaMensagens(mensagens);
a.start();
while (true)
{
Socket sock = servSock.accept();
ThreadServidor t = new ThreadServidor(sock, mensagens);
ThreadMensagens m = new ThreadMensagens(sock, mensagens);
t.start();
m.start();
}
}
catch (Exception e)
{
}
}
}
class ThreadServidor extends Thread
{
private Socket sock;
ArrayList mensagens;
public ThreadServidor(Socket s, ArrayList m)
{
sock = s;
mensagens = m;
}
public void run()
{
try
{
InputStream entrada = sock.getInputStream();
DataInputStream entradaStr = new DataInputStream(entrada);
OutputStream saida = sock.getOutputStream();
DataOutputStream saidaStr = new DataOutputStream(saida);
int opcao = entradaStr.readInt();
LoginCadastro loginCadastro = new LoginCadastro(sock, mensagens);
if(opcao == 0)
{
loginCadastro.Login();
}
else
{
loginCadastro.Cadastro();
}
//fecha a conexão
sock.close();
}
catch(Exception e)
{
}
}
}
class ThreadMensagens extends Thread
{
private Socket sock;
ArrayList mensagens;
int tam = 0;
public ThreadMensagens(Socket s, ArrayList m)
{
sock = s;
mensagens = m;
}
public void run()
{
while(true)
{
if(mensagens.size() > tam)
{
try
{
OutputStream saida = sock.getOutputStream();
DataOutputStream saidaStr = new DataOutputStream(saida);
saidaStr.writeInt(1);
String mensagem = mensagens.get(0).getLogin() +"#"+
mensagens.get(0).getNick() +"#"+
mensagens.get(0).getHora().getHora() +"#"+
mensagens.get(0).getHora().getMin() +"#"+
mensagens.get(0).getTexto();
saidaStr.writeUTF(mensagem);
System.out.println("Mensagem enviada: "+ mensagens.get(0).getTexto());
}
catch(Exception e)
{
}
tam++;
}
if(mensagens.size() < tam)
{
tam--;
}
}
}
}
class ThreadApagaMensagens extends Thread
{
ArrayList mensagens;
int tam = 0;
public ThreadApagaMensagens(ArrayList m)
{
mensagens = m;
}
public void run()
{
while(true)
{
if(mensagens.size() > 0)
{
try {
sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mensagens.remove(0);
}
}
}
}
[/code]