Socket server faz poucas conexoes!

4 respostas
homisinho

ola pessoal...
eu desenvolvi um sistema em delphi q funciona como servidor fica escutando uma porta e comunicando....
os meus clientes nesse software se conectam de 2 a 3 vezes por minuto....

estou fazendo o mesmo sistema em java, mas n sei o q ta acontecendo.... os clientes estão c conectando uma ves a cada 2 munitos!!!!

ai vai mais ou menos o q eu fiz.....tem algo errado? ou socket em java é ruim mesmo???

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import org.jfree.experimental.data.xy.Vector;

/**
 *
 * @author homisinho
 */
public class Principal {
    public Conexao BD; 
    //Criamos o grupo das thread
    ThreadGroup lista = new ThreadGroup("Clientes");    

    ////////////////////////////////////////////metodo principal//////
    public Principal() {        
        try{
            BD = new Conexao();
            int cont_conex;
           ///cria uma query
            Query Qry = new Query(BD.conn);
           //Executando SQL:               
           Qry.open("SELECT * FROM tabela");           
           if(Qry.temalgo()){
              Qry.close();
               try {
               // criando um socket que fica escutando a porta 2000.
               ServerSocket s = new ServerSocket(2000,100);//porta de comunicação, numero 
max de requisições na fila de escuta              
               while (true) {
                //System.out.print("Esperando alguem se conectar...");
                Socket conexao = s.accept();
                conexao.setTcpNoDelay(true);
                conexao.setSoTimeout(20000); ////espera 20000 pra passar no erro...
                // cria uma nova thread para tratar essa conexão
                cont_conex = lista.activeCount()+1;                
                new Thread(lista, new Servidor(conexao,cont_conex,BD)).start();
                /*{ Thread t = new Thread(lista, new Servidor(conexao,cont_conex,BD));
                    t.setName("Energ "+cont_conex);
                    t.start();}*/            
               }
              }
              catch (IOException e) {
               // caso ocorra alguma excessão de E/S, mostre qual foi.
               System.out.println("IOException: " + e);
              }
           }
           else{
               /////////////caso n tenha nenhum equipamento cadastrado abre uma tela////////
           }
        }
        catch (Exception e){
            System.out.println("Problemas ao selecionar dados do BD.\n("+e.toString()+")");          
        } 
        
    }
    /////////////////////////////////////////////////////////////////
}

na minha thread eu faço a comunicação de mais ou menos uns 200 bytes...e tem os closes pra finalizar

finally {
            try {
                entrada.close(); //buffer de entrada
                saida.close(); //buffer de saida
                conec.close(); //socket
            } catch (IOException ex) {
                ex.printStackTrace();
            }
       }

4 Respostas

rapatao

Experimente adicionar isso a seu código:

conexao.setKeepAlive(true);
homisinho

cara coloquei e n mudou…
continuou na mesma…
dei uma olhada no link
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html

mas n entendi a utilidade do KeepAlive…

sera q alguem pode dar uma mão???

rapatao

na verdade o setKeepAlive iria manter a porta aberta para uma possível nova conexão, podendo assim efetuar várias conexões ao mesmo tempo em uma mesma porta. Mas na verdade eu não entendi muito bem sua pergunta, você disse que ele aceita poucas conexões, poucas quantas? e o que acontece com as outras? dá porta fechada? ou qual motivo? Tenta explicar melhor!

homisinho

Meus clientes são hardwares especificos, esses hardwares tentam se conectar a um servidor umas 3 vezes por minuto. Digamos o cliente1 se conecta no meu sofware feito em delphi umas 2 ou 3 vezes por minuto, mas no sistema que eu fiz em java ele se conecta uma vez a cada dois minutos + ou -.
deu pra dar uma esclarecida?

olhando o código que postei, tem algo de errado?

Criado 18 de outubro de 2007
Ultima resposta 19 de out. de 2007
Respostas 4
Participantes 2