サーバのBluetoothソケットからクライアントのBluetoothソケットに文字列を送信する必要があるときに、プログラムに問題があります。 私は一度に1つのString(例えばチャット)を送信している間はすべてうまく動作しますが、短期間に(情報を交換するために)より多くのStringを書き込む必要がある場合、文字列はクライアントから分離されませんコード。たとえば、「FirstUser」を送信していて、その「SecondUser」の直後にクライアントが「FirstUser」と「SecondUser」を読み取っていないとします。 "FirstUserSecondUser"が読み込まれます。どうすればこの問題を回避できますか?Bluetooth接続。文字列を正しく送ることができない
編集:新しいメッセージを送信する前にスレッドをスリープ状態にすると、正しい文字列が読み込まれますが、この解決策は必要な場合にはうまく機能しません。
サーバー・コード:(編集済み)すべてのクライアントに送信
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");
}
}
}
サーバー・コード:クライアントからの読み込み:
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();
}
}
}
クライアントコード:サーバーからの読み込み(編集済み)
クライアントコード:サーバーへの書き込み
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();
}
}
私はすべての小さな助けを感謝します:)。
サーバーはクライアントにメッセージを送信しますか、またはその逆ですか? –
両方のラウンド。クライアントまたはサーバが別の文字列を送信する前に、Thread.sleep(100)の問題を一時的に「解決」しました。しかし、それは本当にすてきな解決策ではありません。 – Refrigerator
送信したすべてのメッセージを消去していますか? –