2013-06-10 20 views
8

Podczas pracy z interfejsem Bluetooth lub Wi-Fi Direct w systemie Android, po zakończeniu wszystkich uzgadniania i podobnych, kończysz z gniazdami.Wysokopoziomowe protokoły dla bezprzewodowych gniazd Bluetooth/WiFi?

Dzięki TCP/IP dysponujemy milionami bibliotek, które są warstwami na gniazdach, dla protokołów wysokiego poziomu: HTTP, XMPP, IMAP itp. Dzięki uprzejmości tych bibliotek możemy zająć się większą ilością domen specyficzne operacje (np. "pobierz ten plik") z instalacją w gnieździe niskiego poziomu obsługiwaną przez bibliotekę.

Pytanie: Czy istnieją odpowiedniki, dla dowolnego protokołu wysokiego szczebla, które są znane do pracy (lub mogą działać) z gniazdami produkowanych przez Bluetooth i/lub Wi-Fi Direct warstw Androidem?

W tej chwili nie jestem wybredny w stosunku do konkretnego protokołu - szukam tylko przykładów tego rodzaju warstwy protokołu, aby ułatwić programistom korzystanie z tego rodzaju opcji łączności.

Na przykład wygląda na to, że mógłbym utworzyć widelec lub dodatek dla OkHTTP, który używa alternatywnego źródła dla gniazd, i prawdopodobnie mógłbym utworzyć serwer Java HTTP, który robi to samo. Biorąc to pod uwagę, twórcy aplikacji pisaliby aplikacje HTTP rozmawiające przez Bluetooth lub Wi-Fi Direct (i, przynajmniej po stronie klienta, kodowanie powinno być dość "naturalne" w odczuciu, gdy parowanie z połączeniem i uzgadnianie zostały zakończone).

IOW, wracając do czynienia z gniazd surowych czuje tak dwie dekady temu ... :-)

Dzięki!


UPDATE

podstawie komentarzu Kristopher Micińskiego na odpowiedź ZeroMQ, pomyślałem niektóre wyjaśnienie może być w porządku.

Łatwiej powiedzieć, co nie chcę chcę: Nie chcę dotykać gniazd po ich utworzeniu. Coś innego na wyższym poziomie powinno obsługiwać te dla mnie, a także obsłużyć to, co uważam za "protokół" (np. Określić, kiedy zakończyła się jakaś operacja komunikacyjna, poza zamknięciem gniazda).

Przeważnie jest to dla mojej książki. Większość przykładów książek na tematy niskiego poziomu nie jest realistyczna, na przykład: "otwieramy gniazdo na serwerze i od razu rozpalamy bajty przedstawiające obraz, który chcemy załadować, a następnie zamykamy gniazdo, gdy skończymy". Choć przykłady pracy, nigdy byś napisać coś takiego w prawdziwym życiu:

  • Jeśli naprawdę działa na poziomie gniazda, byłbyś realizacji jakiś protokół, który ma nadzieje na zajęcie uwierzytelniania, obsługa błędów, itd., nawet jeśli jesteś toczenia protokół yourself

  • niewielu deweloperów pracować bezpośrednio z gniazd dzisiaj dla operacji internetowych

teraz, byłoby super, gdyby protokół oferowane przez warstwa była czymś, czego używali programiści o (np. HTTP) lub nawet o tym, że go nie używali (np. XMPP). Postaram się o proste scenariusze (np. Obsługa N-way jest fajna, ale nie jest konieczna). Pod tym względem, na podstawie wstępnych badań (przeprowadzonych przez mózg pozbawiony snu), ZeroMQ nie jest złą opcją.Brakuje w nim "rozpoznawalności marki" w porównaniu do, powiedzmy, stosu XMPP, który mógłby działać z dowolnymi gniazdami. Ale poza mankietem wydaje się spełniać to, czego jeszcze szukam.

Rozumiem, że te stosy będą miały ograniczenia nałożone przez podstawowy transport (np. Bluetooth działa dobrze tylko w przypadku N-way dla małych wartości N). I na pewno nie chcę przedstawiać - tu ani w mojej książce - że jakiekolwiek rozwiązanie, które przedstawiam, jest komunikacją opartą na gniazdach.

Po prostu chcę czegoś, co ma modlitwę bardziej realistyczną do rzeczywistego wykorzystania. Punkty premiowe, jeśli jest to coś, co mogę pogadać, ponieważ zawsze stosowałem protokoły wyższego poziomu do komunikacji TCP/IP, a więc brak mi doświadczenia z bezpośrednią manipulacją gniazdami.

+0

http://stackoverflow.com/questions/5041426/peer-to-peer-communication-options? –

Odpowiedz

2

Znalazłem ZeroMQ, aby było przydatne do zarządzania połączeniem z gniazdem. Mają wsparcie w wielu językach, w tym JAVA. Możesz użyć tego do zarządzania gniazdami po nawiązaniu połączenia przez wifi-direct lub BT.

+0

To ma możliwości, choć wciąż wydaje się nieco niskiego poziomu, przynajmniej na pierwszy rzut oka. Pozwólcie, że zrobię więcej badań na ten temat. Wielkie dzięki! – CommonsWare

+0

ZeroMQ jest dobrym kanałem w obszarze kolejek wiadomości, ale nie odnosi się do piekła, które powstaje podczas korzystania z Bluetooth/WifiDirect. ZeroMQ jest również najbardziej przydatny, gdy chcesz przetasować własny protokół. Myślę, że @CommonsWare chce czegoś, w czym możesz zrobić coś odwrotnego: popchnij rzeczy Androida pod istniejące rzeczy. (Wciąż, skały ZeroMQ!) –

+0

@KristopherMicinski: Omówiłem moje pytanie w nadziei, że zwrócę się do Ciebie. – CommonsWare

0

Wiem, że to trochę stare pytanie i już udzielono odpowiedzi, ale chciałbym wnieść swój wkład.

Zrobiłem tę aplikację: https://play.google.com/store/apps/details?id=com.budius.WiFiShoot i chociaż bezprzewodowe połączenie bezpośrednie n Handshake jest nieco złamane i to, co powoduje, że większość moich niezadowolonych użytkowników, jestem obsługujących całą komunikację przy użyciu doskonałą https://github.com/EsotericSoftware/kryonet

i mojego kodu jest dość dużo, co widać na ich przykładach, tworzyć Kryo, zarejestruj klas, otwarty serwer podłączyć klienta do serwera IP i strzelać obiektów w całej z informacjami pliku i później strzelać rzeczywistych plików za pomocą tego kodu https://code.google.com/p/kryonet/source/browse/trunk/kryonet/test/com/esotericsoftware/kryonet/InputStreamSenderTest.java

nadzieję, że to pomaga.