Отправка данных с одного Android-устройства на другое

Мне нужно отправлять данные с одного устройства Android на многие другие устройства Android. Скорее всего, это будет односторонняя связь, так как отправитель «отправляет» данные получателю, а получатель получает данные, вносит в них некоторые изменения и сохраняет локальную копию.

Я посмотрел в Интернете (включая stackoverflow) и понял, что есть ряд решений: Wi-Fi P2P, отправка данных через сервер и т. д. В идеале я хотел бы сделать Wi-Fi P2P, но я боюсь, что мое оборудование не поддерживает Таким образом, я думаю об использовании функции беспроводной точки доступа вместо этого.

Итак, вот вопрос: представьте, что устройство, которое транслирует точку доступа Wi-Fi, является «ведущим», а устройства, подключенные к нему, - «ведомыми» (которые просто получают данные от мастера). Как передать данные с ведущего (одно устройство) на ведомые (много устройств)? Я новичок в программировании сети/сокетов, поэтому простое решение и множество примеров были бы очень полезны. Кроме того, можно с уверенностью предположить, что пользователь будет подключаться к точке доступа Wi-Fi вручную (заходя в настройки, находя правильный SSID, подключаясь и т. д.), и что приложение должно просто отправлять данные.

Большое спасибо за уделенное время!


person HJM    schedule 04.10.2013    source источник
comment
Вы смотрели в Bluetooth? Можете ли вы рутировать свое устройство, чтобы добиться этого?   -  person minhaz    schedule 05.10.2013


Ответы (3)


В приведенном ниже примере показан один из способов выполнения того, чего вы хотите достичь. Поэкспериментировав с ним, вы, по крайней мере, почувствуете, на что это похоже, когда оно работает.

+---------+    +---------+    +---------+
| Receive |    | Receive |    |  Send   |
| Browser |    | Browser |    | Browser |
+----+----+    +----+----+    +----+----+
     |              |              |
     |              |              |
     +-------+------+--------------+        +---------+
             |                              | telnet  |
             |   +--------------------------+  CLI    |
             |   |                          | session |
             |   |                          +---------+
          +--+---+--+
          | Accord  |    +------------------------+
          | Cloud   +----+ C/Java/Perl/Python etc |
          | Service |    | Program Language APIs  |
          +---------+    +------------------------+

Существует несколько способов установить двунаправленный канал связи между браузером и веб-службой. Например. WebSocket, AJAX и т.д.

В следующем примере браузер отправки ниже отправляет введенный текст при нажатии кнопки отправки.

введите здесь описание изображения

Когда Браузер получения получает уведомление, он обновляет содержимое браузера значением счетчика и новой текстовой строкой. Он увеличивает счетчик каждый раз, когда получает обновление.

введите здесь описание изображения

В приведенном ниже коде send.html и receive.html Accord.js устанавливает канал связи между браузером и облачной службой Accord. Браузеры отправки и получения взаимодействуют с облачной службой Accord с помощью ActiveML, гибрида метаязыков JSON и XML.

prompt> cat send.html
<html>
<head>
<title>Accord Software, Inc.</title>
<link rel="icon" href="/favicon.gif"/>
</head>
<body>
<script type="text/javascript" src="http://ac.accord.com/src/Accord.js"></script>
<script type="text/javascript">
var rpc; 

function run() {
    if (typeof AccordAmlHttpRpc != 'function' ||
                    typeof checkSessionId != 'function') {
        setTimeout(function(){run();}, 100);
        return;
    }

    rpc = new AccordAmlHttpRpc();
}

/*
 * Send the text string when 'Click to Send' button is acted upon.
 * This ActiveML command will update the string value and any
 * sessions that have outstanding 'wait for an update' will unblock
 * and receive the update notification.
 */

function sendMessage() {
    var elem = document.getElementById("SendMsg");

    rpc.call('aml set string Demo.Msg = "' + elem.value + '";');
}

run();
</script>
<br>
Enter text: 
<input id="SendMsg" type="text" value="" maxlength="50" />
<button onclick="sendMessage()">Click to Send</button>
</body>
</html>

prompt> cat recv.html
<html>
<head>
<title>Accord Software, Inc.</title>
<link rel="icon" href="/favicon.gif"/>
</head>
<body>
<div id="Page"></div>
<script type="text/javascript" src="http://ac.accord.com/src/Accord.js"></script>
<script type="text/javascript"> 
var rpc; 
var div = document.getElementById('Page');

/*
 * Display the string and increment counter.
 */

var count = 0;

function DisplayMsg(s) {
    div.innerHTML = count + ': ' + s;
    count++;
}

/*
 * Event is received as 'ActiveML set string Demo.Msg = "hello, world";' 
 */

function RecvMsg(s) {
    var eq = s.indexOf(' = ');

    /* 
     * Remove quotes and semico at the end.
     */

    s = s.substring(eq+4, s.length-2);

    DisplayMsg(s);
}

/*
 * DisplayString() is called initially to display the current value
 * followed by RecvMsg() for each subsequent update.
 */

function run() {
    if (typeof AccordAmlHttpRpc != 'function' ||
                    typeof checkSessionId != 'function') {
        setTimeout(function(){run();}, 100);
        return;
    }

    rpc = new AccordAmlHttpRpc();

    /*
     * Communication with the back-end service by using
     * ActiveML.
     */

    rpc.call('aml print string Demo.Msg;', DisplayMsg, RecvMsg);
    rpc.call('aml wait for an update to print string Demo.Msg;', 0, 0);
}

run();
</script>
</body>
</html>

Чтобы браузер мог взаимодействовать с Accord Cloud Service, необходимо войти в систему из каждого браузера. Вы можете создать временную бесплатную учетную запись, нажав кнопку входа на сайте ac.accord.com, чтобы опробовать ее. После создания учетной записи вам необходимо подключиться к ac.accord.com через telnet и выполнить следующие действия, прежде чем выполнять какие-либо «отправки» или «получения». В Windows загрузите и используйте PuTTY. В linux/bsd используйте telnet.

prompt> telnet ac.accord.com
Connected to ac.accord.com.
Escape character is '^]'.

Accord ActiveML - Version 1.0.0.0
Copyright (c) 2001-2013, Accord Software, Inc. All rights reserved.

ActiveML Uid: <email>
Password: <password>

Welcome !

aml> create aobject Demo;
aml> create string Demo.Msg;
aml> set string Demo.Msg = "hello, world";

Каждый раз, когда команда set поступает из браузера «отправить» или через интерфейс командной строки telnet, браузеры «получать» будут обновлять свое отображение.

Помимо использования режима telnet CLI, вы также можете взаимодействовать с Accord Cloud Service, используя различные языки программирования, такие как C/C++, Java, Perl, Python и т. д.

Если для этой задачи есть бюджет, возможно, стоит рассмотреть решение на основе подписки. Подписка на облачное решение может быть экономически эффективным решением. (Иногда это может стоить меньше, чем вы тратите на кофе!). Раскрытие информации: я работаю в Accord.

person Arun Taylor    schedule 20.10.2013

Вместо Wi-Fi вы также можете попробовать Bluetooth или NFC. Проблема со всем этим в том, что все они требуют небольшой настройки, включите то и это.

NFC — это круто, а настройка относительно проще. может стоит попробовать.

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


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

person Shawn    schedule 05.10.2013
comment
Мой план состоит в том, чтобы передавать небольшой объем данных, поэтому я предполагаю, что это должно быть что-то быстрое и способное поддерживать соединения в течение длительного времени? - person HJM; 06.10.2013

Горячие точки — это, по сути, сетевые устройства. Как правило, они не знают, что делают приложения.

Чтобы отправлять данные с одного устройства на многие другие устройства, вам понадобится сервер, на который вы «отправляете» или «отправляете» данные, а затем сервер «отправляет» данные всем другим пользователям, подключенным к серверу, и выражает заинтересованность в получении обновлений.

Я реализовал решение, которое делает именно это. Если вы хотите, чтобы я разместил здесь пример кода, дайте мне знать. Затем вы можете поиграть и узнать, что нужно для того, чтобы это произошло. Вы можете использовать устройства на основе браузера / сеансы telnet, чтобы увидеть, как это работает.

person Arun Taylor    schedule 04.10.2013
comment
Не могли бы вы показать мне пример кода? Я лучше всего учусь на примерах. Большое спасибо! - person HJM; 06.10.2013
comment
Я соберу простую демонстрацию, в которой при обновлении строкового значения, например. установите его на привет, мир, в бэкэнде с помощью утилиты telnet, браузеры получат уведомление и обновят дисплей. Может пройти день или около того, прежде чем я смогу опубликовать пример кода. - person Arun Taylor; 07.10.2013