Tengo problemas con mi programa cuando necesito enviar cadenas desde mi servidor bluetooth-socket a mi cliente bluetooth-socket. Todo funciona bien siempre que envíe solo una cadena a la vez (por ejemplo, chat) pero si necesito escribir más cadenas en un corto período de tiempo (para intercambiar información), las cadenas no se separarán del cliente código. Por ejemplo, si estoy enviando "FirstUser" y justo después de "SecondUser", el cliente no lee "FirstUser" y luego "SecondUser". Se leerá "FirstUserSecondUser". ¿Cómo puedo evitar este comportamiento?conexión Bluetooth; no puedo enviar cadenas correctamente
Editar: Si dejo que el subproceso duerma antes de que pueda enviar un nuevo mensaje, se leerán las cadenas adecuadas, pero esta solución no está funcionando bien para mi necesidad.
servidor Código: enviar a todos los clientes (editado)
public synchronized void sendToAll(String message)
{
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
publishProgress(message);
for(OutputStream writer:outputList) {
try {
writer.write(message.getBytes());
writer.flush();
} catch (IOException e) {
System.out.println("Some-Error-Code");
}
}
}
servidor Código: lectura de un cliente:
public void run() {
String nachricht;
int numRead;
byte[] buffer = new byte[1024];
while (runningFlag)
{
try {
if((numRead = inputStream.read(buffer)) >= 0) {
nachricht = new String(buffer, 0, numRead);
serverThread.handleMessage(nachricht);
}
}
catch (IOException e) {
this.cancel();
e.printStackTrace();
}
}
}
cliente-Code: leer desde el servidor (editado)
@Override
protected Void doInBackground(Integer... ints) {
String nachricht = new String();
byte[] buffer = new byte[1024];
int numRead;
while (runningFlag)
{
try {
if(((numRead = inputStream.read(buffer)) >= 0)) {
nachricht = new String(buffer, 0, numRead);
publishProgress(nachricht);
}
}
catch (IOException e) {
clientGame.finish();
e.printStackTrace();
}
}
return null;
}
Código de cliente: escribiendo en el servidor
public synchronized void write(String nachricht)
{
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
outputStream.write(nachricht.getBytes());
outputStream.flush();
} catch (IOException e) {
this.cancel();
e.printStackTrace();
}
}
Aprecio cada pequeña ayuda :).
¿Su servidor envía un mensaje a los clientes o viceversa? –
En ambos sentidos 'ronda. Temporalmente "resolví" el problema con Thread.sleep (100) antes de que el cliente o servidor pueda enviar otra cadena. Pero esa no es realmente una buena solución. – Refrigerator
¿Estás enjuagando todos los mensajes enviados? –