我正在使用广播类使用此代码来收听短信
package com.escortme.basic;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SMSReceiverActivity extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Parse the SMS.
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
// Retrieve the SMS.
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
// In case of a particular App / …Run Code Online (Sandbox Code Playgroud) 我有一个嵌入式设备(源),它通过UDP数据包以20毫秒(=约330字节)的块发送(音频)数据流.因此,网络容量相当低,约为16kBps(实际上由于UDP/IP开销而略多).设备运行lwIP堆栈(v1.3.2)并使用H&D Wireless的WiFi解决方案(HDG104,WiFi G模式)连接到WiFi网络.目的地(接收器)是Windows Vista PC,它也使用USB WiFi加密狗(WiFi G模式)连接到WiFi网络.PC上运行的程序允许我监视丢弃的数据包的数量.我也在运行Wireshark来直接分析网络流量.此时,没有其他客户端通过网络主动发送数据.
当我使用广播或多播发送数据时,许多数据包被丢弃,有时高达15%.但是,当我切换到使用UDP单播时,丢弃的数据包数量可以忽略不计(<2%).
使用UDP我希望丢弃数据包(在我的音频应用程序中这是正常的),但为什么我看到广播/多播和单播之间的性能有如此大的差异?
我的路由器是WRT54GS(FW v7.50.2),PC(接收器)使用的是Trendnet TEW-648UB网络适配器,在WiFi G模式下运行.
我已经为我的应用程序创建了一个指令,在下面的问题中提到了 如何使用AngularJS或Javascript提供下载文件?指令代码如下所示
appModule.directive('fileDownload', function ($compile) {
var fd = {
restrict: 'A',
link: function (scope, iElement, iAttrs) {
scope.$on("downloadFile", function (e, url) {
var iFrame = iElement.find("iframe");
if (!(iFrame && iFrame.length > 0)) {
iFrame = $("<iframe style='position:fixed;display:none;top:-1px;left:-1px;'/>");
iElement.append(iFrame);
}
iFrame.attr("src", url);
});
}
};
return fd;
});
Run Code Online (Sandbox Code Playgroud)
这里使用范围.$ on,当我通过$ scope.$ emit或$ scope.$ broadcast调用此事件时,它不起作用.我的控制器代码如下所示
function reportsController($scope, $http) {
var self = this;
$scope.$broadcast("downloadFile", 'http://google.com');
$scope.$emit("downloadFile", 'http://google.com');
}
Run Code Online (Sandbox Code Playgroud)
我的html文件如下
<div ng-controller="reportsController" id="repctrl">
<a file-download></a>
</div>
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
@Edit:在编译阶段添加了subscribe($ on),以避免在控制器中使用$ timeout.在这里 …
我想实现一个可以"广播"的自定义事件,而不是发送到特定目标.只有那些已将自己注册为此类事件的侦听器的元素才会收到它们.
我的想法如下.
首先,在代码的不同位置,会有表单的陈述
some_subscriber.on_signal( 'some_signal', some_handler );
Run Code Online (Sandbox Code Playgroud)
我正在使用这个术语signal作为"广播事件"的简写.在上面的表达式中some_subscriber,通过为它提供一个处理程序,将自身注册为这种信号的一种类型(称为"some_signal")的监听器.
在代码的其他地方,会有表格的陈述
publisher.signal_types[ 'some_signal' ].broadcast( event_data );
Run Code Online (Sandbox Code Playgroud)
当执行这些语句时,会生成一个新事件并" 广播 ".我的意思是,调用该broadcast方法的代码没有关于它发出的信号的侦听器的直接信息.
我已经实现这个想法的草图在此的jsfiddle,主要是为了说明我用文字描述的上述1.(它肯定不是生产级的,我不是特别相信它可以这么做.)
该实现的关键要素如下.首先,发布者对象不会跟踪他们的订阅者,这可以在这种发布者的工厂方法的实现中看到,如下所示:
function make_publisher ( signal_types ) {
// ...
var _
, signal = {}
, ping = function ( type ) {
signal[ type ].broadcast( ... );
}
;
signal_types.forEach( function ( type ) {
signal[ type ] = $.register_signal_type( type );
} );
return { signal_types: signal_types, ping: …Run Code Online (Sandbox Code Playgroud) 我正在为我的Android手机制作一个Client Server应用程序.
我创建了一个UDP服务器,Python其中坐着并侦听连接.
我可以IP直接放置服务器地址192.169.0.100,它可以很好地发送数据.我也可以放入192.168.0.255并找到服务器192.169.0.100.
是否可以获取我的Android手机所连接的网络的广播地址?我只会在我的Wifi网络或其他Wifi网络上使用此应用程序.
干杯
我想在不使用自己的广播公司的情况下向SHOUTcast或Icecast服务器提供音频数据,因为我将在包括移动设备在内的各种平台上使用它.
我需要协议描述,开源项目或样本,以便能够使用Objective-C,C或C++将音频数据(从麦克风或文件)发送到SHOUTcast和Icecast服务器.
在哪里可以找到构建正确的SHOUTcast/Icecast源客户端所需的信息?
我正在开发一个应用程序,它使用wifi在所有与我的应用程序在同一网络中的手机之间广播UDP消息.
我设法从许多具有外部AP的手机发送/接收数据包,这是我的路由器.
但鉴于没有AP的情况,我希望用户能够使用他们手机的Wifi热点功能,这样他们仍然可以使用我的应用程序.因此,其中一部手机将是wifi热点,其他所有手机都将连接到该热点.
我要求用户通过自己的方式连接到wifi.无论是外部AP还是外部AP.然后当我的应用程序启动时,它会检查手机是否连接到wifi网络,调用WifiManager.isWifiEnabled()和NetworkInfo.isConnected().
问题是,如果我在使用热点的手机中调用这些功能,则函数isConnected()将返回false.我无法使用WifiManager.getDhcpInfo()获取广播地址.连接到热点的其他手机完全可以正常工作.但由于WifiManager被禁用,热点手机无法发送任何广播.
所以,我的问题是"有没有办法检查手机目前是否是一个wifi热点?如果有的话,有什么办法可以获得它的广播地址吗?"
我正在开发Chrome扩展程序,我想在本地网络上广播UDP数据包.
我研究了这个Chrome API.
chrome.sockets.udp.create({}, function(s){
chrome.sockets.udp.bind(s.socketId, address, 0, function(ret){
chrome.sockets.udp.send(s.socketId, data, "172.16.0.0", 5019,
function(sendinfo){console.log(data.byteLength); console.log(sendinfo);})})})
Run Code Online (Sandbox Code Playgroud)
如果我指定了一个地址172.16.0.0,上面的代码就可以了.但如果我换172.16.0.0了255.255.255.255,我得到了{resultCode: -10}表示错误.
我的manifest.json:
{
"manifest_version": 2,
"name": "UDP",
"description": "Test",
"version": "2",
"minimum_chrome_version": "23",
"app": {
"background": {
"scripts": ["main.js"]
}
},
"sockets":{
"udp": {"send":["*:*"], "bind":["*:*"]}
},
"permissions":["system.network"]
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我尝试了chrome.socket,即使在广播上也能正常工作.但从Chrome 33开始,API已被弃用.
我正在寻求帮助,因为我似乎找不到使用 Dart 在本地网络内发送 UDP 广播的方法。
到目前为止,我设法使用 UDP 与RawDatagramSocket. 我可以向特定地址发送消息。
我无法做的是向本地网络内的任何设备发送广播(网络掩码为 255.255.255.0),并等待可能的(多个)答案。这是我正在使用的代码:
RawDatagramSocket.bind('127.0.0.1', 8889)
.then((RawDatagramSocket udpSocket) {
udpSocket.listen((e) {
Datagram dg = udpSocket.receive();
if (dg != null) {
//stuff
}
});
udpSocket.send(utf8.encode('TEST'), DESTINATION_ADDRESS, 8889);
});
Run Code Online (Sandbox Code Playgroud)
我试图取代DESTINATION_ADDRESS有InternetAddress.anyIPv4,但我没有运气。我也在broadcastEnabled里面找到了这个属性RawDatagramSocket,但是我找不到关于如何使用它的更多信息。
预先感谢您的帮助。