Java - problema con receptor de datos gps

 
Vista:

problema con receptor de datos gps

Publicado por kouk (1 intervención) el 22/06/2006 14:49:14
Hola,
Estoy programando un receptor de datos de un dispositivo GPS.
El problema es que cuando el dispositivo se apaga, y se vuelve a conectar, se deja de recibir la información y el programa se queda colgado, concretamente al hacer un readline().
Después de sacar por pantalla "conectado a la base de datos", deja de recibir información
Necesito ayuda, porque es urgente.
Gracias.
Un saludo.

import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

import org.w3c.dom.*;

public class server {

/**
* @param args
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//int timeoutsecs = 600;
int port = 8000;
String cadenarecibida;


String login = "root";
String url="jdbc:mysql://localhost:3600/prueba";
String dispositivo="";
Socket sock;

ServerSocket servsock =
new ServerSocket(port);

while(true)
{

// wait for the next client connection

sock = servsock.accept();

// Get I/O streams from the socket

InputStream ins = sock.getInputStream();
InputStreamReader insr = new InputStreamReader(ins);
BufferedReader in = new BufferedReader(insr);

String nombreRaiz ="markers";
String nombreHijo="marker";

// Aqui abrimos la conexión

try
{
Class.forName("com.mysql.jdbc.Driver");

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();

Element rootElement = doc.createElement(nombreRaiz);
Element reg = doc.createElement(nombreHijo);

doc.appendChild(rootElement);

do
{

Connection conn = DriverManager.getConnection(url,login,"");
Statement stat = conn.createStatement();
System.out.println("conectado a la base de datos");

if (in == null){
sock.close();
System.out.println("El buffer esta vacio");
}


if ((cadenarecibida = in.readLine())==null)
{
System.out.println("cadena recibida con valor nulo");
sock.close();
}

System.out.println("linealeida");
//System.out.println(cadenarecibida);
System.out.println(cadenarecibida);

if(cadenarecibida.startsWith("$DeviceName"))
{
String[]DeviceName = cadenarecibida.split("=");
System.out.println("Dispositivo");
System.out.println(DeviceName[1]);
dispositivo = DeviceName[1];
}
if(cadenarecibida.startsWith("$LastValidPosition"))
{
System.out.println("Posicion actual");
String[] datos = cadenarecibida.split("=");
for (int x=0; x<datos.length; x++)
System.out.println(datos[x]);
// El array datos tiene dos strings uno para la linea
// LastPosition y otro para la trama GPMRC

// En esta parte tokenizamos la trama GPMRC en si que viene
// separada por comas. La trama GPMRC = datos[1]
String[] GPSparameters = datos[1].split(",");
String hora = GPSparameters[1];
String valido = GPSparameters[2];
String latitud = GPSparameters[3];
String dirlat = GPSparameters[4];
String longitud = GPSparameters[5];
String dirlon = GPSparameters[6];


System.out.println(hora);
System.out.println(valido);
System.out.println(latitud);
System.out.println(dirlat);
System.out.println(longitud);
System.out.println(dirlon);
System.out.println(dispositivo);
System.out.println("****************************************************");


// Pasamos los datos en grados y minutos a decimal
//========================================================
String gradoslat = latitud.substring(0,2);
String minutoslat = latitud.substring(2);

String gradoslon = longitud.substring(0,3);
String minutoslon = longitud.substring(3);

float fgradoslat = Float.parseFloat(gradoslat);
float fminutoslat = Float.parseFloat(minutoslat);
float fgradoslon = Float.parseFloat(gradoslon);
float fminutoslon = Float.parseFloat(minutoslon);

float decimallat = fgradoslat + (fminutoslat/60);
float decimallon = fgradoslon + (fminutoslon/60);
reg.setAttribute("lng", "-"+String.valueOf(decimallon));
reg.setAttribute("lat",String.valueOf(decimallat));
rootElement.appendChild(reg);


Transformer t = TransformerFactory
.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("trayecto.xml")));

if(dirlat.equals("S"))
{
decimallat = (decimallat)*(-1);
}
if(dirlat.equals("E"))
{
decimallon = (decimallon)*(-1);
}


String sdecimallat = String.valueOf(decimallat);
String sdecimallon = String.valueOf(decimallon);

//========================================================

String sentencia = "INSERT INTO autobuses VALUES('"+dispositivo+"','"+hora+"','"+valido+"',"+sdecimallon+","+sdecimallat+")";

System.out.println(sentencia);

if( valido.equals("A"))
{
stat.execute(sentencia);
}


}

stat.close();
conn.close();
System.out.println("DEBUG");
}
while(!cadenarecibida.equals("$<end>"));

// out.println(reply);
in.close();


sock.close();

}
catch(SQLException e)
{
System.out.println("ERROR DE SQL");

System.out.println(e);
}
catch(ClassNotFoundException e)
{
System.out.println(e);
}
catch(SocketException se)
{
System.out.println(se);
sock.close();

}
catch(ParserConfigurationException pe)
{
System.out.println("Parser configuration exception");
pe.printStackTrace();
sock.close();



}
catch(TransformerConfigurationException te)
{
System.out.println("Transformer Configuration Exception");
te.printStackTrace();
sock.close();


}
catch(TransformerException tee)
{
System.out.println("Transformer Configuration Exception");
tee.printStackTrace();
sock.close();


}
catch(IOException io)
{
System.out.println("IO Exception");
io.printStackTrace();
sock.close();
}
catch(Exception e)
{
System.out.println("Exception ");
e.printStackTrace();
sock.close();
}


}

}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder