2012-03-23 38 views
6

Tôi có hai thiết bị Android. Một là hành động như một máy chủ và một là một khách hàng. Máy khách kết nối với máy chủ và yêu cầu một tệp - điều này được thực hiện trong một luồng trên máy khách và một luồng trên máy chủ để cả hai có thể tiếp tục làm những gì họ muốn.Bạn có thể thiết lập nhiều kết nối Bluetooth giữa hai thiết bị giống nhau trong Android không?

Máy khách sau đó sẽ cố gắng kết nối lại với máy chủ để yêu cầu một tệp khác. Ngay bây giờ tôi đang nhận được java.io.IOException: Device or resource busy khi cố gắng kết nối (socket.connect()). Có phải vì Bluetooth (trên Android) chỉ cho phép một kênh giữa hai thiết bị? (Nếu nó là một thiết bị khác nó sẽ làm việc nhưng nếu nó là như nhau nó không?) Lưu ý rằng cả hai nỗ lực được thực hiện với cùng một tên dịch vụ và UUID.

Thậm chí nếu lỗi cụ thể đối với mã của tôi, tôi muốn biết đây có phải là trường hợp hay không.

Hệ thống: android 2.2.1 liên lạc với thư viện bluetooth bluecove.

Trả lời

1

AFAIK, không thể kết nối nhiều trong trường hợp kết nối Bluetooth. Bluetooth là API kết nối theo mặc định được đồng bộ hóa nên chỉ có thể kết nối một lần tại một thời điểm. Vì vậy, bạn không thể thực hiện nhiều kết nối. Tuy nhiên, có thể thực hiện theo một cách khác như tạo một kết nối, thực hiện 2 giây hoạt động trên đó và sau đó tạo kết nối khác và thực hiện các hoạt động 2 giây như trong hệ điều hành đa nhiệm thông thường sẽ xảy ra.

+1

vui lòng cung cấp nguồn – CuriousSid

+0

Sau đó, bạn có thể giải thích, ví dụ, làm thế nào có thể một máy tính xách tay kết nối qua bluetooth để một bàn phím chuột và tai nghe cùng một lúc? – Nanoc

6

Chắc chắn không có cùng UUID (định danh UNIQUE phổ biến).

Tham chiếu cho điều đó được lấy từ here

Có thể có nhiều hơn một. Bạn có thể kết nối nhiều thiết bị theo kiểu Máy chủ/Máy khách, bạn có thể thử đặt một trong các thiết bị như một máy chủ và khởi động một số máy khách trên một thiết bị khác. Dự đoán đầu tiên của tôi là bắt đầu một số chủ đề của khách hàng, nhưng bạn có thể phải tìm cách thay đổi địa chỉ MAC cho mỗi chủ đề.

Here bạn có thể tìm thấy một cuộc thảo luận về làm thế nào để thay đổi địa chỉ mac của bạn, nhưng chỉ hoạt động trong các thiết bị bắt nguồn. Tôi không thể tìm thấy bất cứ điều gì khác cho những người không bắt nguồn từ. Không có ý tưởng về làm thế nào để làm điều này lập trình nhưng nó có thể cung cấp cho bạn một sự khởi đầu.

Here có một cuộc thảo luận về việc kết nối một số khách hàng cùng một lúc trong một máy chủ. Tôi đã đến đó từ this question. (Tôi nghĩ rằng đây có thể là bắn gần nhất của bạn)

Here bạn có một cuộc thảo luận về các mạng peer-to-peer.

+1

Tôi đã có thể thiết lập nhiều kết nối song song, bằng cách hủy đăng ký SDP trên kênh hiện tại và đăng ký lại trên kênh miễn phí mới khi kênh hiện tại đã được phân bổ là kết quả của 'kết nối' từ thiết bị. UUID cũng giống nhau. Vấn đề phát sinh khi 4-5 đề khách đồng thời đang cố kết nối. – CuriousSid

+0

Tôi không có ý tưởng về điều đó. Khi bạn quản lý để sử dụng cùng một UUID, bạn sẽ có thể mở 7 kết nối máy khách. Khi bạn nhận được các lỗi bận rộn làm tất cả các chủ đề ngừng làm việc hoặc chỉ khách hàng mới nhất của bạn không thể tham gia mạng? – caiocpricci2

+0

chỉ khách hàng mới nhất không thể tham gia, btw có điều gì đặc biệt với 7 không? – CuriousSid

Các vấn đề liên quan