envío de paquetes a través de la red 3G
Frecuentes
Visto 281 equipos
0
Estoy tratando de escribir un método que envíe un mensaje a través de una red 3G con una estación base al servidor. Estoy tratando de enviar el mensaje varias veces hasta que decido detenerme. Pero cuando probé esto, siempre se detiene después de un corto tiempo y deja de enviar el mensaje. ¿Alguien sabe por qué?
private Runnable commRunnable = new Runnable() {
public void run() {
try {
String message = "Just saying hello!";
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true);
String startReceivingMessage = "Begin sending me data.";
String stopReceivingMessage = "Stop sending me data.";
startSend = false;
stopSend = false;
startReceive = false;
stopReceive = false;
while (!shouldDisconnect) {
if (startSend) {
sendData = true;
startSend = false;
}
if (stopSend) {
sendData = false;
stopSend = false;
}
// Send a message that the server should start transmitting data
// back to us. We only need to transmit this message once.
if (startReceive) {
out.println(startReceivingMessage);
startReceive = false;
receiveData = true;
Thread receiveThread = new Thread(receiveRunnable);
receiveThread.start();
// Tell the server to stop transmitting data.
} else if (stopReceive) {
out.println(stopReceivingMessage);
stopReceive = false;
receiveData = false;
}
if (sendData) {
out.println(message);
}
Thread.sleep(20);
}
} catch (Exception e) {
Log.e("PowerMonitor", e.toString());
} finally {
try {
socket.close();
connected = false;
} catch (Exception e) {
Log.e("PowerMonitor", e.toString());
}
}
}
};
private Runnable receiveRunnable = new Runnable() {
@Override
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String reply = "";
Log.d("PowerMonitor", "Starting to receive");
while (receiveData) {
Log.d("PowerMonitor", "Listening...");
reply = in.readLine();
Log.d("PowerMonitor", "Got message: " + reply);
}
} catch (Exception e) {
Log.e("PowerMonitor", e.toString());
}
}
};
1 Respuestas
0
Necesitamos más de su código para comprender mejor su pregunta, pero según el código que publicó aquí, parece que el socket está siendo cerrado por el
socket.close();
llamar en el finally
bloquear. También informe sobre cualquier error que esté recibiendo.
Respondido 04 Jul 12, 10:07
No recibo ningún error por decir, simplemente se está agotando el tiempo. Estoy rastreando los paquetes que se envían usando WireShark y se envían y luego, después de unos 20-30 segundos, dejan de transmitir. user1465975
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java networking communication or haz tu propia pregunta.
¿Qué quieres decir con 'parar'? ¿Salir o colgar? Si está colgado, ¿ha realizado un volcado de hilo (Ctrl+Break)? - Brian Agnew
Creo que necesitaremos ver más código para tener una idea de lo que está pasando aquí. ¿Puedes publicar tu código de receiveRunnable también? (Suponiendo que se establezca la bandera que lo inicia, por supuesto...) - Jules
@Jules Aquí está la recepción Runnable - user1465975
¡Agregué debajo de la primera parte arriba gracias! - user1465975
¿Su aplicación permanece en primer plano? ¿Cómo evitas que el dispositivo duerma? ¿Qué aparece en el registro? - Jules