Azərbaycan dili Bahasa Indonesia Bosanski Català Čeština Dansk Deutsch Eesti English Español Français Galego Hrvatski Italiano Latviešu Lietuvių Magyar Malti Mакедонски Nederlands Norsk Polski Português Português BR Românã Slovenčina Srpski Suomi Svenska Tiếng Việt Türkçe Ελληνικά Български Русский Українська Հայերեն ქართული ენა 中文
Subpage under development, new version coming soon!

Subject: Programação

2009-04-15 05:13:12
Ué, se eu contesto essas especificações no meu trabalho, por que não fazê-lo na escola ?

Eu bloqueei um projeto de 8 milhões de reais de uma empresa americana super-conhecida, exatamente porque não atendia a esta recomendação.

Queriam me matar, mas no final vieram me perguntar como fazia para contornar o problema.
A resposta é simples, sigam as recomendações.
2009-04-15 05:27:55
pelo simples fato de idealmente e provavelmente haver o seguinte cenário de testes:
. joão vai pegar o servidor dele, rodar no laboratório de graduação 1, na maquina 2, com uma porta de rede gerada a partir de 0.

. pedro, sem conversar com joão, vai ter que rodar o cliente no laboratorio de graduacao 2, na maquina 5, e se conectar ao servidor de joao sem saber qual a porta que joão escolheu.

. por não compartilharem as portas, não será possível fazer a conexão.

entenda que o que ele precisa gerar é um mini protocolo de conexão em socket. coisa do século passado. não dá pra complicar.
2009-04-15 19:19:26
rpz... pra dizer a verdade eu to viajando na maionese com essa discussão de vcs

esse negoço da porta é assim mesmo, do jeito q o prof. pediu, o servidor informa a porta que vai colocar e na hora de conectar o cliente tem que informar a porta correta, e isso no meu prog. ta dando certo, eu qro q vcs minha ajudem na codificação dos requisitos que o prof pediu q eu nao to sabendo, preciso de uma luz!!

como eu havia dito aquele lance das conexões esgotadas quando passava o numero de conexões, o if endoidava, e deixava encerrado o server..

no cliente, quando ele encerrar e fechar a janela, é pra diminuir o contador da lista de clientes conectados no servidor, e nao ta diminuindo, tem la na prog pra remover e nao remove


. Objetivos
• Este trabalho tem como objetivo a implementação de um programa distribuído de troca de mensagens (chat) baseado na interface sockets e com implementação em Java.

2. Requisitos
• O servidor e o cliente deverão permitir a parametrização da porta listener
• Servidor deverá permitir a parametrização do número máximo de clientes conectados
• Servidor deverá exibir o número atual de clientes conectados
• Servidor deverá manter um controle de identificação dos clientes conectados através de um apelido informado pelo cliente no momento da conexão
• Servidor não poderá permitir que dois clientes tenham o mesmo identificador (apelido)
• A cada cliente conectado / desconectado o servidor deverá enviar uma mensagem administrativa aos demais clientes informando o cliente que respectivamente se conectou ou desconectou
• Cliente deverá implementar interface gráfica que permita a exibição das mensagens recebidas, o envio de mensagens para todos os clientes (broadcast) ou para um cliente em particular

3. Opcionais
• A cada um dos opcionais implementados a equipe fará jus a 0,5 ponto de bonificação na nota final do trabalho. São estes os opcionais:
• Implementação de interface gráfica no servidor
• Parametrização do cliente / servidor através de arquivo de configuração
• Permitir ao servidor desconectar um determinado cliente conectado
• Interface gráfica do cliente implementando uma lista (combo-box) atualizada com todos os clientes conectados
2009-04-15 19:44:07
adiciona isBound() na verificação:

if ( scktOrigem.isClosed() || !scktOrigem.isConnected() || !scktOrigem.isBound() )

vê se funciona... se não funfar, acho que vamos ter que implementar um heartbeat e lançar excessões...
2009-04-15 20:03:55
while (true) {
itOrigem = listaClientes.iterator();
while (itOrigem.hasNext()) {
scktOrigem = itOrigem.next();
if ( scktOrigem.isClosed() || !scktOrigem.isConnected() || !scktOrigem.isBound() )
{
listaClientes.remove(scktOrigem);
this.totalClientes--;
System.out.println(totalClientes + " conectados");

}

assim? deu não..
sei lah acho q esse while ai nao ta dando certo
2009-04-15 20:09:06
if (totalClientes < this.NUMCLIENTE)
{
Socket socket = srvSocket.accept();
System.out.println("Conexao aceita de: " + socket.getInetAddress() + ":" + socket.getPort());
listaClientes.add(socket);
totalClientes++;
System.out.println(totalClientes + " conectados");

}
else
{
System.out.println("Capacidade de Conexões Esgotada.");
break; //não é isso
}

aqui eu não to sabendo oq colocar no else..
depois q excede o limite de conexões ele abre o Frame mesmo assim, a diferença é q nao consigo mandar nem receber, come q faz pra nao abrir o Frame e voltar pra parte de inserir a Porta?
2009-04-15 20:16:03
acho que vc pode dar um frame.dispose(); ... isso via fechar o frame (pode abrir e fechar em run time).

mas você vai precisar abrir algum outro frame?
2009-04-15 20:21:23
soh no caso de algum cliente fechar a janela, ai vai precisar abrir outro frame né quando outro cliente quiser se conectar
2009-04-15 20:27:25
while (true) {
itOrigem = listaClientes.iterator();
while (itOrigem.hasNext()) {
scktOrigem = itOrigem.next();
if ( scktOrigem.isClosed() || !scktOrigem.isConnected() || !scktOrigem.isBound() )
{
listaClientes.remove(scktOrigem);
this.totalClientes--;
System.out.println(totalClientes + " conectados");

}

assim? deu não..
sei lah acho q esse while ai nao ta dando certo


o problema é o if... para o socket que morreu, provavelmente o if está retornando false. o que você vai precisar fazer aí é tentar fazer alguma operação com scktOrigem, com reader, e pegar a Exception...
(edited)
2009-04-15 20:29:18
soh no caso de algum cliente fechar a janela, ai vai precisar abrir outro frame né quando outro cliente quiser se conectar

ai você dá um new na outra frame, logo após o dispose();
2009-04-15 20:43:00
tem ctz q eh dispose o nome? num existe isso nao
2009-04-15 20:46:49
Dancei ontem na prova de programação =/

odeio essa materia igualmente o professor.....
2009-04-15 20:52:29
o método de frame é dispose(); sim... cola aqui o código que você botou e que não achou...
2009-04-15 20:54:32
The method dispose() is undefined for the type Servidor
2009-04-15 20:54:59
eiro, ve se funfa, para detectar que a socket fechou:

while (true) {
itOrigem = listaClientes.iterator();
while (itOrigem.hasNext()) {
scktOrigem = itOrigem.next();

try { //HEARTBEAT
scktOrigem.getInputStream().read(new byte[1],0,0);
for (;scktOrigem.available() >= 0;) {
}

} catch(IOException ex) { //socket fechada
listaClientes.remove(scktOrigem);
this.totalClientes--;
System.out.println(totalClientes + " conectados");
}
(edited)
2009-04-15 20:55:47
voce tem que dar um dispose na frame, e não no servidor... frame.dispose()