Tôi gặp sự cố với chương trình của mình khi tôi cần gửi Chuỗi từ cổng bluetooth máy chủ đến ổ cắm bluetooth của khách hàng của mình. Mọi thứ hoạt động tốt miễn là tôi chỉ gửi một chuỗi tại một thời điểm (ví dụ như trò chuyện) nhưng nếu tôi cần viết nhiều chuỗi hơn trong một khoảng thời gian ngắn (để trao đổi thông tin), các chuỗi sẽ không bị tách khỏi máy khách mã. Ví dụ nếu tôi đang gửi "FirstUser" và ngay sau đó "SecondUser" khách hàng không đọc "FirstUser" và sau đó "SecondUser". Nó sẽ đọc "FirstUserSecondUser". Làm cách nào để tránh hành vi này?Kết nối Bluetooth; không thể gửi các chuỗi đúng cách
Chỉnh sửa: Nếu tôi để Chủ đề ngủ trước khi có thể gửi tin nhắn mới, nó đọc đúng chuỗi nhưng giải pháp này không hoạt động tốt cho nhu cầu của tôi.
Server-Code: gửi tới tất cả khách hàng (edited)
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: đọc từ một khách hàng:
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: đọc từ máy chủ (chỉnh sửa)
@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;
}
Mã khách hàng: viết thư đến máy chủ
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();
}
}
Tôi đánh giá cao mọi trợ giúp nhỏ :).
Máy chủ của bạn có gửi tin nhắn cho khách hàng hoặc ngược lại không? –
Cả hai cách 'tròn'. Tôi tạm thời "giải quyết" vấn đề với Thread.sleep (100) trước khi máy khách hoặc máy chủ có thể gửi một chuỗi khác. Nhưng đó không thực sự là một giải pháp gọn gàng. – Refrigerator
bạn có đang xóa tất cả các tin nhắn đã gửi không? –