2013-01-22 26 views
1

我使用藍牙的RFCOMM編寫了Android應用程序。我通過相同的RFCOMM UUID向Android應用發送1 MB數據。RFCOMM接收數據時丟失了1個L2CAP數據包

我注意到1個L2CAP數據包數據在我的應用程序中遺漏了。有關更多詳情,請參閱以下信息

我的Android手機藍牙支持最大RFCOMM有效載荷是990個字節,因此,遠程裝置發送每個分組L2CAP用的990個字節的有效負載。每當我從遠程設備發送1K數據時,它都被分成2個990和34字節的L2CAP數據包。

在我的Android應用接收到數據之後,我檢查每個1K數據,有我注意到1 L2CAP數據包即,990個字節已在機器人跳過。

我使用分析儀檢查了從遠程設備發送的所有數據。它完全發送1 MB數據而不會失敗。

但是在我的android應用程序中,我無法接收。這與我的應用程序沒有問題,因爲我在此處使用了藍牙聊天示例代碼。

我測試這個幾次,990個字節的丟失的數據的每個I運行測試時間不在1MB的數據相同的索引。

我測試了採用Android 2.2,2.3.3和2.3.6版本的3個手機的每個移動facinf同樣的問題

但同時接收來自RFCOMM套接字的InputStream的數據還我沒有得到任何異常。

如果有人面臨和解決我的問題,請幫助我。

+0

爲了澄清,你是說,接收到的數據流中,你收到了連續字節?換句話說,您發送了「 A <990 bytes> B 」並且收到了「 AB 」? –

+0

@DavidSchwartz我正在那樣做。這在1MB數據中是1次 –

+0

我可以想到很多可能的原因,並且幾乎所有這些都是代碼中的錯誤。試試這個實驗 - 記錄每個調用中接收到的低字節接收函數的字節數。看看它們是否總和你發送的字節數。如果是這樣,並且990字節仍然丟失,那證明你的代碼丟失了它們。 –

回答

0

您可以使用HCIDump工具檢查兩個設備之間傳輸/接收的ACL數據。如果數據與HCI ACL數據包匹配/發送和接收,則接收端的L2CAP將丟棄某個數據包。

看看這個鏈接,看看mtu是否會導致這個問題。

http://people.csail.mit.edu/albert/bluez-intro/x559.html

感謝 馬尼萬南

+0

丟棄數據包不會導致數據丟失。 RFCOMM是一種[可靠的](http://en.wikipedia.org/wiki/Bluetooth_protocols#Radio_frequency_communication_.28RFCOMM.29)協議,即使在數據包丟失的情況下也不會破壞數據。 –

+0

@David:同意RFCOMM是可靠的。但我試圖想象一種方式來確認yugendra的論點 –

0

您可能要派遣所有的數據後刷新流, 這可能是RFCOMM可以緩衝一些數據wiating其PDU填滿。 請參閱本 - 數據,發送數據流中,有990個字節它們之間的數據的OutputStream::flush()

+0

我的遠程設備是USB藍牙適配器和藍牙協議棧,通過在Windows中編寫USB無線類驅動程序來開發。我使用USB分析器檢查它是否將所有數據包發送到藍牙無線電。 –

+0

發表一些代碼或日誌以供審查 –