Tôi đang xây dựng một máy chủ Java Bluetooth đơn giản cho máy tính của mình bằng API Bluecove. Tôi cũng đang xây dựng ứng dụng khách của Android nhưng vấn đề dường như bắt nguồn từ ứng dụng phía máy chủ.Giữ kết nối Java Bluetooth còn sống
Tôi chắc chắn ai đó đã đăng bất kỳ câu trả lời nào ở đâu đó và tôi đã thử các giải pháp khác nhau một cách chặt chẽ trong vài ngày qua và xem mọi diễn đàn có thể có nhưng tôi dường như không giữ kết nối trên chuỗi ổ cắm còn sống.
Tôi có thể trao đổi tin nhắn sau khi kết nối được thiết lập từ android sang máy tính và ngược lại từ máy tính sang android nhưng ngay sau khi các byte được trao đổi, ngăn xếp Bluecove tắt và đóng kết nối ổ cắm ngay cả khi tôi không nói rõ ràng với connection.close().
Tôi đã cố gắng sử dụng một vòng lặp (một số câu lệnh đúng) để giữ kết nối còn hoạt động và không còn tắt ổ cắm sau khi nhận được tin nhắn đầu tiên nhưng không nhận được bất kỳ tin nhắn nào sau đó điện thoại thông minh với máy tính của tôi. Mặc dù về cơ bản nó vẫn còn sống, nhưng nó không thể nhận được bất kỳ tin nhắn mới nào khi tôi cố gắng gửi chúng từ điện thoại thông minh. Không chắc chắn lý do tại sao.
Tôi xin lỗi, đây là lần đầu tiên tôi đăng và tôi không chắc tại sao phần đầu tiên của mã không hiển thị chính xác trên trang.
Mã thực hiện kết nối:
public BluetoothServer()
{
try
{
service = (StreamConnectionNotifier)
Connector.open("btspp://localhost:" + new UUID(0x1101).toString() +
";name=SampleServer");
System.out.println("open connection");
while(runState == true){
connection = (StreamConnection) service.acceptAndOpen();
//send a greeting across to android
outputStream = connection.openOutputStream();
String greeting = "JSR-82 RFCOMM server says hello";
outputStream.write(greeting.getBytes());
//run thread that listens for incoming bytes through socket connection
Thread t = new Thread(new ConnectedThread(connection));
t.start();
}
} catch(IOException e) {}
}
THREAD MÃ để nghe ĐE DỮ LIỆU
public void run()
{
try
{
//open input stream to listen to data
inputStream = connection.openInputStream();
byte buffer[] = new byte[1024];
int bytes_read = inputStream.read(buffer);
String received = new String(buffer, 0, bytes_read);
System.out.println("received: " + received);
}
catch(IOException e){}
}
Bạn không thể gửi nhiều tin nhắn từ Máy khách đến Máy chủ, nhưng bạn có thể Gửi nhiều tin nhắn từ Máy chủ đến Máy khách không? Vòng lặp nào gọi phương thức run() của bạn? Bạn có thể cung cấp mã này gọi chạy() không? –
Trong quá khứ tôi gặp phải vấn đề rất giống nhau. Nhưng trong trường hợp của tôi, kết nối không được đóng lại, chỉ có tốc độ IO bị chậm lại (ở phía Android). Sau khi gỡ lỗi, chúng tôi phát hiện ra, sau một thời gian không hoạt động, nó xảy ra ở phía Android sau khi hết thời gian chờ cụ thể (chế độ an toàn của thiết bị chuyển mạch Android) và thời gian chờ này không thể thay đổi. Để giữ kết nối còn sống, chúng tôi chỉ định gửi gói rỗng (một byte). Hy vọng nó sẽ giúp. – Eugene
Không chỉ sử dụng các khối try/catch trống. Đăng nhập ngoại lệ khi nó được ném ra, nó sẽ giúp bạn có được lý do thực sự. Nếu không, bạn đang đoán. – Don