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]