Comunicação via Socket

0 respostas
celso.martins

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();
		}
	}
Criado 19 de março de 2007
Respostas 0
Participantes 1