Peer-to-Peer communication options

Это решение является немного более старой школой и должно быть эффективной памятью.

public static String toHexString(byte bytes[]) {
    if (bytes == null) {
        return null;
    }

    StringBuffer sb = new StringBuffer();
    for (int iter = 0; iter < bytes.length; iter++) {
        byte high = (byte) ( (bytes[iter] & 0xf0) >> 4);
        byte low =  (byte)   (bytes[iter] & 0x0f);
        sb.append(nibble2char(high));
        sb.append(nibble2char(low));
    }

    return sb.toString();
}

private static char nibble2char(byte b) {
    byte nibble = (byte) (b & 0x0f);
    if (nibble < 10) {
        return (char) ('0' + nibble);
    }
    return (char) ('a' + nibble - 10);
}
23
задан John J Smith 18 February 2011 в 12:44
поделиться

4 ответа

Вы смотрели на библиотеку AllJoyn компании Qualcomm ? Он предназначен для работы через Bluetooth или Wi-Fi, поэтому может подойти, хотя, если вы подключаетесь через 3G или более широкую сеть, он не будет работать.

Учитывая различия и надежность сетей между двумя удаленными устройствами, не находящимися в одной сети, я бы задал вопрос, является ли одноранговое соединение лучшим решением, и рискну предложить рассмотреть возможность использования сервера приложений между ними, поэтому вы затем можно использовать Cloud to Device Messaging [устарело] (возможно, в тандеме с Google App Engine). то есть, чтобы отправить сообщение, отправитель передает его на сервер, а затем сервер передает его получателю.

Теоретически все устройства в сети имеют уникальный IP-адрес и могут общаться друг с другом, но редко бывает так просто, поскольку маршрутизаторы / брандмауэры настроены по-разному, поэтому вам нужно уделять большое внимание используемым портам, особенно учитывая, что многие входящие порты по умолчанию заблокированы из соображений безопасности.

20
ответ дан 29 November 2019 в 02:41
поделиться

Вам также следует взглянуть на peerdroid, проект с открытым исходным кодом, доступный здесь здесь . Я искал варианты одноранговой связи с точки зрения наличия коллекции федеративных устройств (предварительно сопряженных, если хотите, аналогично сопряжению Bluetooth); эта библиотека выглядит так, как будто она может дать вам основу для того, что вы пытаетесь сделать.

Если вы находитесь в собственной сети (например, в домашней или офисной сети Wi-Fi), то вы сможете запросить другие подключенные устройства. Если сеть, в которой вы находитесь, не находится под вашим контролем (мобильная сеть или общедоступный Wi-Fi), то сеть будет настроена таким образом, чтобы изолировать каждое устройство от всего остального. В этом случае у вас не будет другого выбора, кроме как поставить сервер, чтобы он действовал как человек посередине. Это приносит свои собственные архитектурные компромиссы - каждое устройство должно регулярно опрашивать сервер или держать соединение открытым - если вы не используете Google App Engine, который поддерживает push-уведомления через собственную инфраструктуру Google.

3
ответ дан 29 November 2019 в 02:41
поделиться

Спасибо за ваш ответ ldx, но, как вы указали, мне понадобится коллега. Похоже, что некоторые дальнейшие исследования указывают на то, что XMPP является подходящей технологией, и в настоящее время предлагаются некоторые услуги, хотя, как представляется, они направлены на «сервер» для уведомлений клиентов. Здесь есть хорошее обсуждение здесь по XMPP и некоторые больше здесь , хотя может показаться, что есть еще некоторые проблемы, такие как опрос v push, длительные открытые соединения http и срок службы батареи. Xtify выглядит многообещающе, особенно их веб-сервис. Я надеюсь, что это даст подходящую информацию для других, которые смотрят на тему одноранговой передачи данных.

1
ответ дан 29 November 2019 в 02:41
поделиться

Попробуйте PushSharp . Серверная библиотека для отправки push-уведомлений на устройства iOS (iPhone / iPad APNS), Android (C2DM и GCM - Google Cloud Message), Windows Phone и Windows 8.

0
ответ дан 29 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: