我必须将数据从一个Android设备发送到许多其他Android设备。这可能是单向通信,因为发送方将“推送”数据到接收方,接收方接收数据,对其执行一些修改并保存本地副本。
我环顾网络(包括stackoverflow)并意识到有很多解决方案:wifi P2P,通过服务器发送数据等。理想情况下我想做wifi P2P但我担心我的硬件不支持它,因此,我正在考虑使用无线热点功能。
所以这就是问题:想象一下将wifi热点广播的设备作为“主设备”,连接到它的设备是“从设备”(它只接收来自主设备的数据)。如何将数据从主设备(一个设备)广播到从设备(许多设备)?我是网络/套接字编程的新手,所以一个简单的解决方案和许多例子都非常有用。此外,可以安全地假设用户将手动连接到wifi热点(进入设置,找到正确的SSID,连接等),并且应用程序应该只发送数据。
非常感谢你的时间!
答案 0 :(得分:1)
您也可以尝试蓝牙或NFC,而不是使用wifi。所有这些的问题是它们都需要相当多的设置,启用它和那个。
NFC非常酷,设置相对容易。可能值得一试。
取决于您发送的数据,您还可以执行一些神奇的操作,例如通过短信编码,或创建二维条形码,另一部手机通过相机扫描。
现在如果你真的想要广播,它与热点无关。您只能使用UDP,并将其广播到您的子网。其他客户端应该在端口上监听,他们只会得到它。做一些谷歌搜索,看看如何使用套接字发送广播。
答案 1 :(得分:1)
下面的示例显示了您想要完成的一种方式。通过试验,你至少可以感受到它工作时的感觉。
+---------+ +---------+ +---------+
| Receive | | Receive | | Send |
| Browser | | Browser | | Browser |
+----+----+ +----+----+ +----+----+
| | |
| | |
+-------+------+--------------+ +---------+
| | telnet |
| +--------------------------+ CLI |
| | | session |
| | +---------+
+--+---+--+
| Accord | +------------------------+
| Cloud +----+ C/Java/Perl/Python etc |
| Service | | Program Language APIs |
+---------+ +------------------------+
有几种方法可以在浏览器和Web服务之间建立双向通信通道。例如。 WebSocket,AJAX等
在以下示例中,单击“发送”按钮时,下面的“发送浏览器”会发送输入的文本。
当接收浏览器收到通知时,它会使用计数器值和新文本字符串更新浏览器内容。每次收到更新时,它都会递增计数器。
在下面的send.html和receive.html代码中,Accord.js在浏览器和Accord Cloud Service之间建立了一个通信渠道。发送和接收浏览器使用ActiveML与Accord Cloud Service进行交互,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上的登录按钮来创建临时免费帐户。创建帐户后,您需要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 CLI模式,您还可以使用各种编程语言(如C / C ++,Java,Perl,Python等)与Accord Cloud Service进行交互。
如果此任务有预算,则基于订阅的解决方案可能值得评估。订阅基于云的解决方案可以是一种经济高效的解决方案。 (有时它的成本可能低于你在咖啡上的花费!)。披露:我为雅阁工作。
答案 2 :(得分:0)
热点本质上是网络设备。他们通常不知道应用程序正在做什么。
为了将数据从一个设备发送到许多其他设备,您需要一个服务器,您“提交”或“发送”数据,然后服务器将“推送”数据输出到连接到服务器的所有其他用户并表示有兴趣收到更新。
我已经实施了一个完全符合这个要求的解决方案。如果您希望我在此处发布示例代码,请与我们联系。然后你可以玩,并了解实现它所涉及的内容。您可以使用基于浏览器的设备/ telnet会话来查看它的工作情况。