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