.net手機軟件開發(六)OBEX應用——文件傳輸部分
2024-07-10 12:58:40
供稿:網友
 
(六) obex應用——文件傳輸部分
在手機數據傳輸方面基本obex應用分為
l 文件傳輸
l irmc同步
文件傳輸又可以細分為以下基本操作
l 初始化連接
l 斷開連接
l 設置路徑
l 取得目錄信息
l 創建目錄
l 上傳下載文件
l 刪除文件或空目錄
在筆者的軟件當中設計了obex這個類,里面包含了以上所有的基本操作。另外針對m55的服務端的特殊性又設計了更名、取得磁盤空間信息、移動、拷貝文件的功能。具體請參考源代碼。
下面具體講述各個操作的細節。
l 初始化連接
初始化連接包括了使手機進入obex狀態再到發送connect指令的一系列過程。具體流程參考下圖。
atæat^sqwe=0æat^sqwe=3æconnectæ連接到folder-listing service
其中at^sqwe=0和at^sqwe=3是西門子特有的隱藏的at指令,甚至在官方的at指令集里面都沒有提到。其作用是初始化手機到obex模式。
發送connect指令收到手機回復以后確定max packet length等參數。最后連接到folder-listing service進行文件操作。如果需要irmc同步的話,在connect后直接連接到irmc sync service即可,手機立刻進入同步模式,所有的應用程序退出。
在筆者的程序中當中首先使用at指令確定手機當前的工作,如果超時,嘗試發送+++并等待1秒鐘以便手機從不正常的obex狀態中退出。然后在此發送at,成功后即進行文件操作,否則引發一個錯誤。
l 斷開連接
這里的斷開連接是指從obex模式退出到at狀態中。在at指令中,連續發送三個0x2b然后等待一秒鐘以上即可退出數據模式進入常規at模式。
l 設置路徑
程序中使用setpath操作設置路徑。需要注意的是,可以設計兩種風格的過程:一種使用絕對路徑,另一種使用相對路徑。
對于手機而言,經筆者實踐證明,使用絕對路徑要比使用相對路徑方便,而且更準確,但效率上稍遜,特別是在多層目錄的情況下。由于手機沒有能夠返回當前路徑的方法,所以相對路徑總難以控制,只有通過程序控制,極容易出現錯誤。所以建議使用絕對路徑。
如果使用絕對路徑,那么路徑名將呈現/path1/path2這種形式。首先回到根目錄,然后一級一級的到達目的。在筆者的obex類當中,可以看到backtoroot這個過程。其作用就是把當前程序路徑切換到根目錄以免引起混亂。
l 取得目錄信息
要取得一個目錄的文件信息可以用發送get指令。該get指令需要一個typeheader,其值為x-obex/folder-listing
隨后服務端會返回一個xml文件,包含了整個目錄的信息。例如子目錄名、文件名、大小、最后修改時間。再通過xml解析后就會得到目錄信息。
l 創建目錄
當setpath的flags的bit1設為1并且無法找到目錄時,服務端會創建這個目錄并進入。
請注意,再次使用setpath并將flags的bit0設為1返回上層目錄,否則容易引起混亂。
l 上傳下載文件
使用put和get命令可以實現上傳和下載文件。注意所有的文件操作都在setpath所指定的目錄下進行。
使用put命令實現上傳時,至少需要提供nameheader,bodyheader,一般還要提供lengthheader,datetimeheader。大文件傳輸需要正確處理bodyheader,不能超出了服務端最大所能接收的packet的大小,否則會出現錯誤。
需要注意的是如果當前文件存在,那么put命令不會覆蓋已有的文件而是追加,導致錯誤。傳輸文件之前需要首先刪除同名文件。
使用get命令實現下載時,只需要提供nameheader即可。具體例子參考上一節。
l 刪除文件或空目錄
使用put命令,其nameheader指定為文件名或目錄名并將bodyheader設置為空即可。
非空目錄無法刪除,會返回錯誤。
 
 西門子手機還有移動、拷貝等功能,具體實現方法請參閱obex源代碼。