Ola pessoal, gostaria de tirar uma duvida, e quem sabe, alguem possa “me dar um norte” nesse problema:
Tenho varios equipamentos que usam comunicação socket, porem trabalham em modo servidor, consegui fazer a comunicação com o aparelho usando a api do fabricante, enviar e receber os dados, porém, consegui conectando apenas em 1, e logo apos o recebimento e envio, a thread se encerra, n sendo possivel mais validar os dados, este já seria o primeiro problema, o segundo, e o qual é a grande duvida, é: consigo fazer minha aplicacao cliente se comunicar com varios servidores, e, manter essa comunicação enviando e recebendo dados sempre que os servidores solicitarem, ativa, ate o encerramento via botão ou outro comando qualquer?
Agradeço desde já.
Sim, é só abrir um socket para cada servidor e não fechar os sockets.
Obrigado pelo retorno LvBarbosa, este é meu codigo, feito em um JCheckBox, ate faz a validação, porem, uma unica vez, ao tentar passar outro cartao no dispositivo, ate mesmo o q tem o numero do teste, ele n retorna ao equipamento se bloqueia ou libera.
String ip = “172.16.18.60”, porta = “3000”;
if (jchkConexao.isSelected()) {
cliente = new TcpClient(ip,
Integer.valueOf(porta));
cliente.connect();
if (cliente.isConnected()){ //check de conexao
new Thread(new Runnable() {
public void run() {
String aux2="";
try {
while (jchkConexao.isSelected()) {
if (cliente.availableData() > 0) {
char[] temp = cliente.receiveData(cliente.
availableData()); //recebendo dados
String textoRecebido = "";
for (char chr : temp) {
textoRecebido += chr;
}
String textoFormatEnvio = "";
System.out.println("Dados Recebidos: "+textoRecebido+"\n\n");
String semEspacoTab = ""; //comecar remover espacos e tabs
semEspacoTab = textoRecebido.replaceAll("\t", " ");
semEspacoTab = semEspacoTab.replaceAll("\n", "");
semEspacoTab = semEspacoTab.replaceAll(" ", "");
txtRecebeDados.setText(semEspacoTab.substring(18, 38));
if("00000000004266502030".equals(txtRecebeDados.getText())){ //check de numero do cartao
char[] data;
data = "01+REON+00+1]5]Acesso liberado]".toCharArray();
textoFormatEnvio = textFormat(data);//formatando texto (cabeçalho, checksum e Byte final)
cliente.sendData(textoFormatEnvio.toCharArray()); //enviando dados
}else{
char[] data;
data = "01+REON+00+30]5]Acesso Negado]".toCharArray();
textoFormatEnvio = textFormat(data);
cliente.sendData(textoFormatEnvio.toCharArray());
}
}
Thread.sleep(500);
System.out.println("Conectado à: "+ip);
}
} catch (Exception e) {
}
jchkConexao.setText("Conectado");
System.out.println(aux2);
System.out.println(aux2);
}
}).start();
}else{
System.out.println("Conexão não Estabelecida");
jchkConexao.setSelected(false);
}
} else {
cliente.disconnect();
jchkConexao.setText("Conectar");
System.out.println("Desconectado de: "+ip);
}
consegui fazer a comunicação com varios equipamentos ao mesmo tempo, com a dica do amigo ali em cima, tambem consegui tratar os dados enviados pelo equipamento, e devolver uma resposta conforme estes dados, porem, ainda tenho o problema de a thread para apos devolver os dado no socket, criei uma classe e inicio uma thread/socket para cada ip, mas quando há o pedido do equipamento, e é respondido este pedido, a thread se finaliza, nao respondendo mais, e como o codigo que postei ali em cima, n tem nenhuma linha finalizando ela. Sera que alguem poderia me dar um help?