Để có thể thiết lập một kết nối Bluetooth giữa hai thiết bị, một trong hai thiết bị phải được thiết lập, khởi tạo Socket Bluetooth ở trạng thái lắng nghe, và sau đó chập nhận kết nối khi có yêu cầu kết nối tới từ thiết bị khác. Các bước để tạo Bluetooth Socket Server được thực hiện như sau :
Tìm hiểu công nghệ Bluetooth và viết ứng dụng minh họa
Hình 7-5 Các bước khởi tạo Bluetooth Socket Server RSocket::Open() Accept() Chấp nhận kết nối và thiết lập một blank socket RSocket:: Bind() RSocket::Listen() RSocket::Close()
Kết nối vào Socket server trên thiết bị và chọn protocol cần sử dụng. Mở một socket tương ứng với protocol sử dụng.
Tạo ra một đối tượng địa chỉ Bluetooth Socket thuộc lớp TBTSockAddr và thiết lập cổng (port) của nó là server channel (đối với giao thức L2CAP và RFCOMM có sự khác biệt) , và sau đó kết buộc socket vào địa chỉ đó bằng hàm RSocket::Bind().
Đưa socket vừa tạo ra vào trang thái lắng nghe các kết nối tới bằng hàm: RSocket::Listen();
Tạo ra một socket trống (blank socket) và truyền tới cho socket listen thông qua hàm RSocket::Accept(RSocket &acceptSocket,....). Khi hàm này kết thúc, socket được truyền trong tham số của hàm sẽ kết nối với thiết bị khác và có thểđược dùng để truyền và nhận dữ liệu. Socket lắng nghe lúc đó vẫn tồn tại
Tìm hiểu công nghệ Bluetooth và viết ứng dụng minh họa
và sẵn sàng để có thểđược truyền vào một socket trống khác và tạo ra một kết nối khác.
Khi ứng dụng đóng vai trò là Server hay Receiver kết thúc, nó cần phải đóng socket listen, cũng như tất cả các socket đã kết nối.
Đoạn code sau minh họa việc tạo ra Bluetooth socket server và lắng nghe kết nối:
// 1. Kết nối tới socket server secsion RSocketServ socketServ;
socketServ.Connect(); TProtocolDesc pInfo;
_LIT(KL2Cap, "L2CAP"); // hoặc là RFCOMM tùy giao thức sử dụng // 2. Mở socket để lắng nghe
RSocket listen;
listen.Open(socketServ,KL2Cap);
// 3. Khởi tạo đối tượng địa chỉ bluetooth socket TBTSockAddr addr;
addr.SetPort(KListeningPSM); // Kết buôc socket lắng nghe
User::LeaveIfError(listen.Bind(addr));
// 4. Bắt đầu lắng nghe các yêu cầu kết nối từ các thiết bị khác. User::LeaveIfError(listen.Listen(2));
// 5. Chơđợi và thực hiện kết nối khi có yêu cầu kết nối RSocket accept;
TRequestStatus status;
Tìm hiểu công nghệ Bluetooth và viết ứng dụng minh họa listen.Accept(accept,status);
User::WaitForRequest(status);
// Nếu status == KerrNone : accept socket đã kết nối thành công.
Trước khi chấp nhận một kết nối tới, cần phải thiết lập các yêu cầu về an toàn và bảo mật đối với các kết nối (xem phần Bluetooth Security Manager), và cần phải quảng bá các dịch vụ có thể sử dụng của thiết bị để các thiết bị khác sử dụng khi kết nối ( Bluetooth Service Discovery Database) .