藍牙協議棧的最上層是各種應用模型,其中最典型的有 服務發現、互通、無繩電話、傳真、撥號網絡、耳機、局域網訪問、文件傳輸 。
藍牙套接字 w insock應用封裝對 L2CAP 和 RFCOMM 的操作,類似 TCP/IP 套接字。
藍牙編程方式
1. 利用模擬串口,模擬串口建立在RFCOMM 通道上。藍牙模擬串口爲滿足現有系統的需求,對於新建的系統,微軟不推薦。
2. 使用winsock ,需要指定服務,因此可以指定串口服務進行通信。模擬串口和 winsock 都是利用 RFCOMM 協議。使用 winsock 實現藍牙通信可以直接監聽到藍牙設備關閉或者離開通信範圍,而利用模擬串口只能通過超時來檢查。
藍牙套接字
套接字就是不同計算機爲了滿足各自進程間通信的需要所架設的一條數據通道。
套接字之間的連接過程分爲三個步驟:
1. 服務器監聽,服務器套接字進入等待連接狀態,實時監控網絡狀態;
2. 客戶端請求,客戶端套接字指出服務端套接字的地址和端口號,然後向服務器套接字提出連接請求;
3. 連接確認,服務端套接字和客戶端套接字建立連接,然後繼續進入監聽狀態。
藍牙通信有兩個角色:發起方和接收方。接收方進行配置後等待發起方建立連接,一旦建立連接,兩方是對等的,都可以發送或接收數據。
藍牙套接字支持在L2CAP 和 RFCOMM 層上的通信。
服務器端首先創建一個socket 實例,將其綁定到給定的 RFCOMM 通道,在這個通道上監聽連接請求。客戶端也需要創建一個 socket 實例,然後利用 connect 方法連接指定的服務端。
藍牙編程環境
利用VS2005 和 C# 編寫藍牙信息系統(包括藍牙文件傳輸和藍牙信息廣播),可以採用 In The Hand 公司提供的用於開發藍牙應用的組件 32feet.Net 。
利用32feet.Net 組件開發藍牙應用程序,要求設備端必須包含微軟藍牙協議棧以及 .net CF 2.0 及以上版本的支持。
藍牙應用程序開發
Delegate方法:先假定 UI 主線程爲 A 線程(窗體控件的擁有者),工作線程爲 B 線程,如果 B 線程要控制窗體控件,就可以調用 Invoke 方法封裝 delegate 成一個標準的 windows 消息,加入 A 線程的消息隊列中,最後 B 線程等待 A 線程的處理。
private delegate void SafeWinFormsThreadDelegate ( string msg);
private void writeMsg( string msg)
{
SafeWinFormsThreadDelegate d = new SafeWinFormsThreadDelegate (updateUI);
Invoke(d, new object [] { msg });
}
private void updateUI( string msg)
{
listBoxMsg.Items.Add(msg);
}
在真機上調試
調試時選擇windows mobile professional Device ,在程序中設置斷點。