estou fazendo um jogo d ateh 4 pessoas, o servidor tem 4 instancias de uma thread e cada uma fica dando um socket = serverScoket.accept();
depois de conectado, ele passa dakela linha e cai num while(true) com um in.readUTF, certo? certo!
entao quando eu tiver 4 clientes conectados, o servidor nao tera mais socket = serverScoket.accept();, certo? certo!
o problema eh q mesmo com os 4 clientes conectados eu acinda consigo “conectar” mais um cliente, ou melhor dizendo, parece q ele fica numa fila, e c eu desconecto um cliente, dai sim ele conecta de verdade, eu gostaria de dar uma msg de erro pra ele, mas como?
Você precisa de uma única thread, com o ServerSocket.accept(). Depois de recebida a conexão você pega o socket que ele te retornou e dispara outra thread, para lidar com essa conexão fechada.
Só mantenha esse accept num while(). Um pseudo código seria esse:
numConexoes = 0;
while (numConexoes < 4) {
Socket cliente = server.accept();
Thread t = new Thread(new ClienteRunnable(cliente));
t.start();
numConexoes++;
}
o código ta muito grande e não vai ficar bom por aki, mas simplificando:
metodo run da thread()
{
socket1 = serverSocket.accept();
in1 = new DataInputStream…
out1 = new DataOutputStream…
while(true)
{
String s = in1.readUTF();
}
}
4 instancias iguais, porem com o numero certo da thread, por exemplo:
socket1 = serverSocket.accept();
socket2 = serverSocket.accept();
socket3 = serverSocket.accept();
socket4 = serverSocket.accept();
in1, in2, in3, in4
etc…
quando todos estao conectados, nao existe mais serverSocket.accept, pois ai as 4 threads entraram no while(true)
mesmo assim, quando conecto um quinto cliente, ele parece q fica numa fila…
este eh o problema… nao pode ficar numa fila, kero q de erro!
Eu falei para você ter uma única thread para receber as conexões.
Não para ter uma única thread para tratar os seus clientes.
Se você tiver 4 SocketServers, terá que abrir 4 portas na sua aplicação. Já viu algum servidor que exige que você abra uma porta para cada cliente?
Simplesmente não é assim que se faz.
Eu falei para você ter uma única thread para receber as conexões.
Não para ter uma única thread para tratar os seus clientes.
Se você tiver 4 SocketServers, terá que abrir 4 portas na sua aplicação. Já viu algum servidor que exige que você abra uma porta para cada cliente?
Simplesmente não é assim que se faz.[/quote]
desculpa vini, mas vc que nao leu direito o que escrevi, tenho 1 serverSocket.accept(), retornando para 4 diferentes variaveis:
[quote=paulohrl]vc cria uma thread para receber a conexao, e 4 para tratar…
quando receber uma conexao, poe em uma q trate e vlta a ouvir…
se nao tiver nenhuma para tratar disponivel, envia a mensagem de erro para quem tentou conectar…[/quote]
para eu enviar uma msg d erro pra quem ta tentando conectar, eu preciso do socket dela, e do respectivo OUT, porem todos os serverSocket.accept() ja foram utilizados, isto é, nao tem mais como pegar o socket do quianto cara, muito menos o OUT…
e mesmo sem nenhum accept no servidor, o quinto cliente conecta, incrivel!!!