Bluetooth-соединение; не могу отправлять строки должным образом

У меня проблемы с моей программой, когда мне нужно отправить строки с моего серверного bluetooth-сокета на мой клиентский bluetooth-сокет. Все работает нормально, пока я отправляю только одну строку за раз (например, в чате), но если мне нужно написать больше строк за короткий период времени (для обмена информацией), строки не будут отделены от клиентского кода . Например, если я отправляю «FirstUser», а сразу после этого «SecondUser», клиент не читает «FirstUser», а затем «SecondUser». Он будет читать «FirstUserSecondUser». Как я могу избежать такого поведения?

Изменить: если я позволю потоку спать до того, как он сможет отправить новое сообщение, он прочитает правильные строки, но это решение не подходит для моих нужд.

Server-Code: отправка всем клиентам (отредактировано)

   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");
        }
    }
}

Server-Code: чтение с клиента:

   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();
            }
    } 
} 

Client-Code: чтение с сервера (отредактировано)

@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;
}

Client-Code: запись на сервер

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();
        }
    }

Я ценю любую помощь :).

6
задан Refrigerator 6 January 2012 в 19:30
поделиться