2013-10-04 121 views
2

我必須從一個Android設備發送數據到許多其他Android設備。這可能是單向通信,因爲發送者將「推送」數據給接收者,並且接收者接收數據,對其進行一些修改並保存本地副本。從一個Android設備發送數據到另一個

我環顧網絡(包括stackoverflow),並意識到有一些解決方案在外:無線P2P,通過服務器發送數據等理想情況下,我想要做無線P2P,但我怕我的硬件不支持它,因此,我正考慮使用無線熱點功能。

所以,這裏有一個問題:假設有設備將廣播WiFi熱點作爲「主」,連接到它的設備是「從」(它只接收來自主設備的數據)。如何從主設備(一臺設備)向從設備(多臺設備)廣播數據?我是網絡/套接字編程的新手,所以一個簡單的解決方案和大量的例子將非常有用。此外,假設用戶將手動連接到WiFi熱點(進入設置,找到正確的SSID,連接等)並且該應用只需發送數據是安全的。

非常感謝您的時間!

+0

你看過藍牙嗎?你能根植你的設備來實現嗎? – minhaz

回答

1

下面的例子顯示了你想完成什麼的一種方式。通過實驗,您至少可以感受到它在工作時的感受。

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

有幾種方法可以在瀏覽器和Web服務之間建立雙向通信通道。例如。 WebSocket,AJAX等

在以下示例中,單擊發送按鈕時,下面的發送瀏覽器發送輸入的文本。

enter image description here

當接收瀏覽器收到通知時,它更新的瀏覽器內容與計數器值和新文本字符串。它在每次收到更新時遞增計數器。

enter image description here

在下面send.html和receive.html代碼,Accord.js建立一個瀏覽器和雅閣雲服務之間的通信信道。發送和接收瀏覽器使用ActiveML與Accord Cloud Service進行交互,這是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上的登錄按鈕來創建一個臨時免費帳戶來嘗試。創建帳戶後,您需要telnet到ac.accord.com並在執行任何「發送」或「接收」之前執行以下操作。在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"; 

每一組命令被從任一個「發送」的瀏覽器或通過telnet CLI接收到的時間,所述「接收」的瀏覽器將更新其顯示。

除了使用Telnet命令行模式下,你還可以與雅閣雲服務使用不同的編程語言如C/C++,Java和Perl,Python和等互動

如果沒有完成這個任務,預算,基於訂閱的解決方案可能值得評估。訂購基於雲的解決方案可能是一種具有成本效益的解決方案。 (有時它可能比你花在咖啡上的花費少!)。披露:我爲Accord工作。

0

熱點本質上是網絡設備。他們通常不知道應用程序在做什麼。

爲了將數據從一臺設備發送到許多其他設備,您需要一臺服務器,您將「提交」或「發送」數據,然後服務器會將數據「推送」到連接到其他用戶的所有其他用戶服務器並表示有興趣接收更新。

我已經實現了一個完全做到這一點的解決方案。如果您希望我在此發佈示例代碼,請告訴我。然後,您可以玩並瞭解實現目標所涉及的內容。您可以使用基於瀏覽器的設備/ Telnet會話來查看它的工作情況。

+0

你能告訴我一些示例代碼嗎?我從例子中學習得最好。非常感謝你! – HJM

+0

我會彙總一個簡單的演示,其中當您更新字符串值時,例如在後臺使用telnet工具將其設置爲「hello,world」,瀏覽器接收通知並更新顯示。在我發佈示例代碼之前可能需要一天左右的時間。 –

1

而不是做wifi,你也可以嘗試藍牙或NFC。所有這些問題都是他們都需要相當多的設置,啓用這個和那個。

NFC非常酷,安裝相對簡單。可能值得嘗試。

取決於你發送的數據,你也可以做一些神奇的事情,比如通過短信進行編碼,或者創建一個二維條碼,另一部手機通過相機掃描。


現在,如果你真的想播出,它無關的熱點。您只能使用UDP,並將其廣播到您的子網。其他客戶端應該在端口上進行監聽,他們會簡單地得到它。做一些谷歌搜索,看看如何使用套接字發送廣播。

+0

我的計劃是傳輸少量數據,所以我猜測它需要速度快,並且可以保持很長時間的連接? – HJM

相關問題