Ajuda com Socket

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.

[code]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);
		}
	}
}

}[/code]