socket  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
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!
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

[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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....
[Email] [MSN]
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
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
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...
[Email] [MSN]
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
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
[Email] [MSN]
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
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
[Email] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team