2015-04-15 8 views
6

Irgendwas beunruhigt mich seit Jahren. Ich arbeite mit vielen Bluetooth und in letzter Zeit wifi Streams (spp). Diese Streams verbinden sich immer mit bestimmten Geräten und die Kommunikation erfolgt über einfache Byte-Befehle.Kann ein Bluetooth- oder WiFi-Stream (spp) jemals Bytes übersehen oder beschädigt haben?

Einige der Geräte (ihre Mikrocontroller) programmiere ich selbst und dort muss ich immer überprüfen, ob das Signal auf dem Draht ist, was ich erwarte, senden und auf crcs überprüfen.

Irgendwie möchte ich das gleiche auf meinem Smartphone machen, weil ich mit "readByte" auf meine Streams zugreife und byteweise lese und mich immer frage, ob es tatsächlich möglich ist, dass a) ein Byte von einer Nachricht fehlen kann b) Nachrichten kommen gemischt oder "out of sequence"

Ich habe keine Ahnung, wie viel die zugrunde liegende Hardware tut. Prüft es jede Nachricht mit crc und fordert die Nachricht erneut an, wenn sie beschädigt wurde? Oder übergibt es blind jedes Byte an meine "readByte" -Methode?

Wenn das Gerät Nachricht a und dann b sendet, ist es möglich, dass der Empfänger b vor a empfängt und meinen Code b vor einem oder sogar die Bytes wie ein Reißverschluss durcheinander bringt und mir eine [0] dann b [ 0] dann a [1] und so weiter.

Wie viel Vertrauen in diese Ströme sollte ich haben? Etwas Klärung wäre wünschenswert

Antwort

3

Ich denke, Sie können gut schlafen. WiFi und Bluetooth basierend auf Paket-Switch-Netzwerk, jedes Paket kommt mit CRC, und Physical Layer verfügt über integrierte Staus und Link Quality Control - so, abgesehen von extrem seltenen Firmware-Bugs, ist es tatsächlich zuverlässiger als kabelgebundene serielle Verbindung.

Mit anderen Worten - Fehlerkorrektur auf einer niedrigeren Ebene auftritt, als Sie verwenden ..

Antwort über Paketankunfts zu hinterfragen: Punkt-zu-Punkt-Protokolle sind nicht von diesem Problem betroffen. Das Umordnen von Paketen findet statt, wenn sie auf unterschiedlichen Routen unterwegs sind, also kein Problem, wenn es keine anderen Routen gibt.

Sie erhalten die gleichen Bytes in der gleichen Reihenfolge, wenn Sie Byte-orientierte Streams über diese Protokolle verwenden, da sie mit diesem Ziel im Hinterkopf konzipiert sind. Der Paketzugriff ist dagegen nicht, aber Android bietet Ihnen keine Möglichkeit, es zu verwenden.

0

Nun der Daten Korruption ich habe keine gute Idee. Aber "mischen Sie die Bytes wie ein Reißverschluss und geben Sie mir eine [0] dann b [0] dann a [1]" sollte nicht passieren.

Ich baute App, die NMEA Nachrichten von externen Bluetooth-GPS analysiert. Ich überprüfe nichts und einige, wie meine App stabil funktioniert.

1

Ich fühle mich wie Wenn Sie jemals über Computer Network OSI Model gelernt haben, werden Sie verstehen, worüber ich spreche besser.

Zuerst, TCP/IP hat nichts gemeinsam mit Bluetooth. TCP ist ein Transport-Level-Protokoll, während Bluetooth ein Protokoll der niedrigeren Ebene wäre. So können Sie TCP oder UDP zusätzlich zu Bluetooth verwenden, während Sie TCP und UDP zusätzlich zu Ethernet verwenden.

Sekunde, Wenn Daten über Bluetooth-Geräte übertragen werden, würde TCP Protokoll verwendet werden. Verwenden Sie TCPcongestion recovery algorithms, um sicherzustellen, dass Daten genau übertragen werden.Moderne Implementierungen von TCP umfassen vier ineinander verschlungenen Algorithmen zur Ablaufsteuerung: langsam, Vermeidung von Staus, Fast Retransmit und schnelle Wiederherstellung starten. Also, wenn Sie mehr darüber wissen wollen, können Sie das Internet suchen. Weil sie lieber theoretischer als programmatisch wären.