通過藍芽傳送檔案的幾個步驟

2021-04-21 22:49:21 字數 1366 閱讀 5803

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 ...