Ajuda com Socket

0 respostas
marciofermino

Amigos, já tentei de tudo, preciso de ajuda para codigo de um Socket que fique escutando a porta 9000

Esse socket estará escutando dispositivos que estão fora da empresa.

Acontece que com o que eu implementeo, alguns dispositivos estão executando bem outros não.

Tenho muitas dúvidas de como escutar a porta e tratar o que esta sendo enviando para o servidor.

Vou postar o código que estou usando.

Obrigado.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TCPServer {
/*
 
 SA200STT;417302;134;20130424;19:14:03;d5340;-22.949088;-046.537905;000.435;000.00;3;0;14037;11.93;100000;2;1675
 
SA200STT = COMANDO 
417302 = IMEI
16:51
134 = VERSAO
16:51
20130424 = DATA
16:51
19:14:03 = HORA (COM BASE GMT(0) + 3 HORAS A FRENTE DE SP)
16:52
d5340 = NÌO SEI O QUE MAS NÌO SERVE PRA NADA
16:526
-22.949088;-046.537905 = LAT LONG
16:53TIVO
16:56
3 = SATELITES
16:58
0 = GPS FIXADO(1) OU NÌO(0)
000.435 = VELOCIDADE
16:55
000.00 = ANGULO DE INCLINA?ÌO DO DISPOSI
16:59
14037 = DISTANCIA EM METROS
16:59
11.93 = VOLTAGEM DA BATERIA
17:01
100000 = RESPOSTA DOS SENSORES (0/1) O PRIMEIRO ? O òNICO QUE USAMOS QUE INDICA IGNI?ÌO LIGADA OU DESLIGADA OS OUTROS NÌO INSTALAMOS POIS SERIAM ABERTURA DE PORTA, ABERTURA DE PAINEL, ETC...
17:02
2 = MODO (1 PARADADO / 2 DIRIGINDO)
1675 - ID SEQUENCIAL DA MENSAGEM
 */
	
	
	// para listar as portas
	// lsof -i | grep ESTABLISHED | sort 
	
	
	//private int serverPort = 2007;
	private int serverPort = 9999;
	private ServerSocket serverSocket;
	private List<ConnectionService> connections = new ArrayList<ConnectionService>();

	
	int x=0;
	
	
	public TCPServer() {
		try {
			serverSocket = new ServerSocket(serverPort);
			System.out.println("Waiting...");
			
			while (true) {

					x++;
					
					
					Socket socket = serverSocket.accept();
	                System.out.println("Connected: " + socket);
	                ConnectionService service = new ConnectionService(socket);
	                service.start();

				
			}

		} catch (IOException e) {
			System.out.println("erro 1");
			//e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		new TCPServer();
	}

	class ConnectionService extends Thread {

		private Socket socket;
		private BufferedReader inputReader;
		private PrintWriter outputWriter;

		// private String username;

		public ConnectionService(Socket socket) {
			this.socket = socket;
			
			System.out.println("Dados recebidos "+x);
			try {
				inputReader = new BufferedReader(new InputStreamReader(
						socket.getInputStream()));
				outputWriter = new PrintWriter(socket.getOutputStream(), true);
			} catch (IOException e) {
				System.out.println("erro 2");
				//System.out.println(e.getMessage());
			}
		}

		@Override
		public void run() {
			while (true) {
				try {
					
						String receivedMessage = inputReader.readLine();
						
						
						if(receivedMessage!=null){
							System.out.println(receivedMessage+"\n");	
							
							
							//outputWriter.close();
							
							
							// Aqui foi alterado !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
						}
				
						
						
						
							StringTokenizer stoken = new StringTokenizer(
									receivedMessage);
							
							String fargument = null;
							
							
							if(stoken !=null){
								fargument = stoken.nextToken();	
							}
							
							
							
							if (fargument.equals("print2all")) {
								this.sendToAnyone(stoken.nextToken());
						
						
						}
						
					
				} catch (IOException ex) {
					//System.out.println("erro 3");
					//Logger.getLogger(TCPServer.class.getName()).log(
					//		Level.SEVERE, null, ex);
				} catch (NullPointerException e) {
					//System.out.println("SEM LEITURA");
					//System.out.println(e.getMessage());
				} finally {
					
					// Aqui foi alterado !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					// Aqui foi alterado !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					// Aqui foi alterado !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					// Aqui foi alterado !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					// Aqui foi alterado !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					outputWriter.close();
					
					
				}

			}
		}

		protected void sendMessage(String message) {
			outputWriter.println(message);
		}

		private void sendToAnyone(String message) {

			for (ConnectionService connection : connections) {
				connection.sendMessage(message);
			}
		}
	}
}
Criado 28 de abril de 2013
Respostas 0
Participantes 1