Pergunto isso porque é muito mais fácil vc fazer isso com um servidor de aplicação (Tomcat,JBoss, Glassfish…) ao invés de programar toda a lógica de comunicação.
Mais respondendo a sua pergunta: Cada cliente deve possuir uma Thread que fique escutando/enviando as solicitações para o servidor, se não seu programa vai ficar parado aguardando uma mensagem.
R
raschefelipe
Nem faculdade de serviço.
É um projeto que iremos disponibilizar para algumas pessoas utilizarem, neste caso, seria algo comercial.
F
felipe_gui
Estou sendo pai de um sistema utilizando socket
usando TCP e para comunicacao. Para cada pedido ele processa
em um thread diferente.
Preciso criar um sisteminha que possui um ou mais terminais.
Os terminais conectam ao servidor e aguardam um número que deve ser exibido na tela.
O servidor aguarda as conexões e para cada nova conexão cria uma thread para tratar.
Dúvida: cada cliente necessariamente precisa ser uma thread ? ou apenas um mero cliente que fica em loop aguardando o valor a ser exibido via socket.
Valeu !
Essa é praticamente a definição cuspida e escarrada do que acontece em Servlets. A menos que queira implementar um servidor de aplicação no braço, por favor use um já feito. Se o problema são protocolos, não é só de HTTP que essas Servlets vivem.
R
raschefelipe
Fiquei com uma dúvida no que se refere ao controle das threads clientes, no seguinte sentido.
Cada thread Cliente conecta no servidor, para isso elas devem sabem o IP e a porta.
Minha thread cliente e a thread servidor está se conectando via socket.
Gostaria que o cliente fique em “wait() ?” até que o servidor envie um string para que após seja impresso o valor (no cliente) e após imprimir permaneça em wait() até o proximo valor.
Mas pelo que estudei, seria necessário que a thread cliente tenha conhecimento da thread servidor, para que possar dar o comando “servidor.wait()”, certo ?
B
Bruno_Laturner
Se voce der um wait no servidor ele vai parar, e ninguem mais vai acessá-lo.
O que acontecerá é simples:
Servidor escuta continuamente por requisições do cliente.
Servidor recebe uma requisição.
Servidor cria uma thread, passa a requisição para ela tratar.
Servidor volta a escutar por mais requisições.
R
raschefelipe
Bruno,
Eu entendi esta parte, acredito que não estou sendo claro. É o seguinte, eu ainda não sei como fazer com que os cliente recebem um String e após imprimir este String continuem aguardando novos strings.
O que eu imaginava é que fosse possivel dar um wait() aqui no cliente até que o servidor mande um string (neste caso o servidor daria um notifyAll), ao invés de fazer um loop verificando o conteúdo do string.
Então oq nao sei como fazer é exatamente este wait() no cliente, pois meu cliente desconhece a thread servidor, sacou ?
Existe alguma solução neste sentido ?
B
Bruno_Laturner
Os próprios tutoriais sockets da Sun sobre sockets tratam sobre esses assuntos de escuta, espera, etc. Já deu uma olhada?
Cara, show de bola. Era exatamente isso que eu procurava.
Já testei e deu td certo, ou seja, o cliente fica “escutando” as mensagens do servidor. Quando recebe algo toma uma ação.
Só falta alterar para que o servidor escute vários clientes, as isso ah tah dominado tb !
Valeu !
R
raschefelipe
Vou postar aqui um exemplo aqui pra galera, a idéia é que um cliente receba a informação do servidor e imprima. Ele fica em um loop aguardando a informação.
packageprincipal;importjava.net.*;importjava.util.ArrayList;importjava.io.*;publicclassServidorimplementsRunnable{ServerSocketservidorSocket;publicServidor(intporta)throwsException{servidorSocket=newServerSocket(porta);servidorSocket.setReuseAddress(true);newThread(this).start();System.out.println("Servidor ouvindo na porta: "+porta);}publicvoidrun(){try{while(true){ArrayList<ServidorAcao>listaTrataCliente=newArrayList<ServidorAcao>();System.out.println("Aguardando conexões.");ServidorAcaoserverAcao=newServidorAcao(servidorSocket.accept());serverAcao.start();listaTrataCliente.add(serverAcao);}}catch(Exceptione){try{servidorSocket.close();}catch(IOExceptione1){e1.printStackTrace();}e.printStackTrace();System.exit(1);}}publicstaticvoidmain(String[]args){try{newServidor(10000);}catch(Exceptione){e.printStackTrace();System.exit(1);}}}
Pessoal tou com uma duvida aqui, se alguem puder ajudar agradeço…
quando criamos um cliente temos que passar o ip do servido e o socket!!! mas esse ip so funciona se estiver na mesma rede ou pela internet funciona tambem?
e como faço pra conseguir para pegar na net?