Boa tarde!
Trabalho com equipamentos de rastreamento GPS. Um novo equipamento, chegado até nós há cerca de 3 semanas, precisa se comunicar com o nosso servidor onde um SocketServer está escutando uma determinada porta. Estou recebendo as comunicações normalmente. O problema acontece quando tento me comunicar com o aparelho para um handshake, por exemplo. A comunicação tem que ocorrer dentro do mesmo canal onde a msg foi recebida.
Por exemplo: Se o servidor recebe a mensagem %%demo48,0[CR][LF] (onde %% é o cabeçalho, demo48 o ID do aparelho, 0 um contador que varia de 1 a 9 e [CR][LF] Carrier Return e Line Feed. A resposta deve ser &&0[CR][LF], && o cabeçalho e sendo 0 o contador. Não envia o ID para efeito de economia.
O código que estou usando está abaixo!
Agradeço antecipadamente qualquer ajuda!
public void Conecta(){
try{
ServerSocket sktServer = null;
Socket skt = null;
BufferedReader leitor = null;
sktServer = new ServerSocket(2020);
System.out.println("Aguardando Mensagem...");
skt = sktServer.accept();
skt.setKeepAlive(true);
System.out.println("Endereço do socket remoto: " + skt.getRemoteSocketAddress());
System.out.println("Endereço do host: " + skt.getInetAddress().getHostAddress());
System.out.println("Porta: " + skt.getPort());
leitor = new BufferedReader(new InputStreamReader(skt.getInputStream()));
mensagem = leitor.readLine();
StringTokenizer st = new StringTokenizer(mensagem, ",");
String[] partes = new String[st.countTokens()];
for (int i = 0; i < partes.length; i++){
partes[i] = st.nextToken();
}
if (partes.length == 2){
// Keep Alive packet
String handshake = "&&" + partes[1] + "\n\r";
System.out.println(handshake);
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.write(handshake);
try{
skt.close();
sktServer.close();
}catch(Exception e){
e.printStackTrace();
}
java.util.Date dataUltimaLeitura = new java.util.Date(System.currentTimeMillis());
System.out.println("*****************************");
System.out.println("** Coletor Portman v1.0");
System.out.println("** Mensagem para Manter a Conexao GPRS");
System.out.println("** Mensagem " + mensagem);
System.out.println("** Ultima leitura: " + dataUltimaLeitura.toLocaleString());
System.out.println("*****************************");
return;
}
try{
skt.close();
sktServer.close();
}catch(Exception e){
e.printStackTrace();
}
if (mensagem != null){
System.out.println(mensagem);
if ((mensagem.substring(9,10).equals("A")) || (mensagem.substring(9,10).equals("L"))){
System.out.println("Processando Mensagem");
SeparaDados(partes);
System.out.println("Mensagem processada e armazenada!");
}
}
}catch(Exception e){
e.printStackTrace();
}
}