Socket server faz poucas conexoes!

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???

[code]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()+”)");
    }

    }
    /////////////////////////////////////////////////////////////////
    }
    [/code]

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(); } }

Experimente adicionar isso a seu código:

conexao.setKeepAlive(true);

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???

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!

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?