| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 12:58:32
|
aloha
JavaChild
Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline
|
ae galera,
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?
obrigado!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 13:01:13
|
paulohrl
Virtual Machine Man
Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline
|
O server socket aceita a conexao e coloca em um socket certo? certo!
Entao, quando vc tenta mais um, ele aceita e coloca em um novo socket.
Tudo depende de como vc implementou. Se puder postar o trecho do codigo ajuda.
Abraço
[edit]
Na verdade eh ateh desnecessario ter 4 servers sockets na maioria dos casos... um jah da, e coloca o q receber pra ser atendido por um socket.
[/edit]
This message was edited 1 time. Last update was at 07/11/2008 13:02:24
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 13:09:33
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20555
Localização: Curitiba/PR
Online
|
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:
This message was edited 1 time. Last update was at 07/11/2008 13:09:56
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 13:28:51
|
aloha
JavaChild
Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline
|
nao posso ter 1 thread, pois sao 4 clientes...
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!
obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 14:27:16
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20555
Localização: Curitiba/PR
Online
|
Leia direito o que eu escrevi.
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.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 14:31:36
|
paulohrl
Virtual Machine Man
Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline
|
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....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 14:57:42
|
aloha
JavaChild
Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline
|
ViniGodoy wrote:Leia direito o que eu escrevi.
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.
desculpa vini, mas vc que nao leu direito o que escrevi, tenho 1 serverSocket.accept(), retornando para 4 diferentes variaveis:
socket1 = serverSocket.accept();
socket2 = serverSocket.accept();
socket3 = serverSocket.accept();
socket4 = serverSocket.accept();
cada 1 dentro de uma thread diferente... saka?
assim terei 4 sockets, destes 4 sockets eu tirarei 2 canais de comunicação de cada 1, IN e OUT
abraço, obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 14:59:33
|
aloha
JavaChild
Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline
|
paulohrl wrote: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....
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!!!!!!
obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 15:01:33
|
paulohrl
Virtual Machine Man
Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline
|
rs
cria um 5º socket soh pra receber, dar a mensagem de erro e pronto rs...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 15:12:08
|
aloha
JavaChild
Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline
|
paulohrl wrote:rs
cria um 5º socket soh pra receber, dar a mensagem de erro e pronto rs...
eh uma solução, tbm tinha pensado nisso, mas....
prefiro saber c vcs tem alguma ideia do tipo, setar maximo de conexao no serverSocket e talz...
valew
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 15:14:01
|
paulohrl
Virtual Machine Man
Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline
|
cria um contador... depois q ele aceitar a quarta conexao vc tira ele do loop q da o accept
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 15:44:43
|
aloha
JavaChild
Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline
|
paulohrl wrote:cria um contador... depois q ele aceitar a quarta conexao vc tira ele do loop q da o accept
ai eh q ta, após 4 conexoes, nao existe mais serverSocket.accept();
nao consigo imaginar como o cliente ta conseguindo conectar....
abraço
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2008 15:47:17
|
paulohrl
Virtual Machine Man
Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline
|
cara, sem ver m trecho do codigo nao da pra imaginar o q ta acontecendo nao
|
|
|
 |
|
|