rel="file-list" href="file:///c:%5cdocume%7e1%5cpost%5clocals%7e1%5ctemp%5cmsohtml1%5c01%5cclip_filelist.xml">這篇文章中,我敘述一下怎樣通過
socket
的方式搜尋手機並傳送檔案的過程。 1.
既然要使用
socket
,那麼首先就是要建乙個
socket
鏈結。
hsock := socket(af_bth, sock_stream, bthproto_rfcomm);
這裡的af_bth
的值為32
,是專用於藍芽
soket
的建立
2. 搜尋手機和服務
windows在驅動介面和socket中提供的bluetooth service discovery protocol(sdp)藍芽服務發現協議。可以通過試用下面的一系列函式實現手機和服務的搜尋:
wsasetservice
wsalookupservicebegin
wsalookupservicenext
wsalookupserviceend
3.通過socket與手機連線以後,可以直接通過write函式往手機傳送資料。
但是傳送的資料如何能被手機正確的識別? 這裡就要談談物件推送服務。
物件推送服務
是支援藍芽的裝置所提供的一種服務,其guid為''。 在與手機進行連線的時候,我們需要指定需要手機提供哪些服務。把服務作為connect函式的乙個引數。
errcode:=connect(hsock, @mysockaddrbth, sizeof(mysockaddrbth));
其中mysockaddrbth 的結構如下:
_sockaddr_bth = packed record
addressfamily: word;
btaddr: int64;
serviceclassid: system.tguid;
port: ulong;
end;
serviceclassid
就用於指定服務的guid。
由於我們是需要向手機傳送檔案,並且不需要預先經過認證,所以服務我使用的就是物件推送服務。
連線之後向手機傳送檔案,通過write函式寫入的資料怎樣被手機正確的識別? 那就是這些資料必須是經過obex協議封裝好的資料。這就需要把要傳送的檔案分成若干個段,每一段資料根據obex協議進行封裝,加上包頭和包尾,才能向手機進行傳送。手機受到這種包後,就會按照obex協議揭開,把每一段資料合併成為乙個檔案。
關於obex協議,我們下一章再討論。
藍芽傳送多個檔案
之前用流的方式和contentprovide的方式發。結果流的方式在接收端出來的有問題,而contentprovide方式由於bluetoothshare 類不支援 android 4.1 及以上,所以放棄了。現在改用以下方法 arraylista new arraylist for int i 0...
讀書的幾個步驟
學習的第一步,就是劃線和標註。就是拿到一本書,不管是精讀還是泛讀,不管以後準備還是不準備複習,都要在書上劃線和標註或者摺頁,劃線就是劃重點,這一招讓你在下次碰到這本書的時候,最短時間就能看到它的精髓,用陳安之的話說就是,這不是時間管理什麼才是時間管理?此外,對於非常重要的精彩頁面,還可以摺頁。標註就...
centos通過mail傳送檔案到163郵箱
檢視163郵箱如何配置授權碼 vim etc mail.rc新增以下內容 set from 163.com 發件人,把自己的163郵箱賬號位址寫上去 set smtp smtps 這個配置不用變 set smtp auth user 163.com 這個是郵箱登入使用者,寫成自己的郵箱賬號 set ...