我是否认为我无法使用LocalBroadcastManager发送"粘性"广播?如果是这样,这似乎是非常短视的,特别是如果应用程序使用可以在应用程序生命周期中交换进出的片段并依赖于广播数据.
例如,假设我有一个"智能"温度计,每隔N秒将当前温度广播为UDP数据报.
现在,我可以编写一个侦听这些消息并以图形方式显示它们的客户端,并且我可以让该客户端同时在多台计算机上运行.到目前为止没问题.
但是,当我尝试在同一台Windows计算机上运行客户端的两个实例时,我会遇到有关尝试" 绑定到已使用的端口 "的错误.
这是:-
如果A或B,有什么办法围绕它.
如果是C,那么我会发布一些代码..
VOICE_CALL, VOICE_DOWNLINK ,VOICE_UPLINK
Run Code Online (Sandbox Code Playgroud)
我没有在Android 4.0上工作但是在Android 2.3(实际设备)上工作,我已经上传了一个虚拟项目来记录所有拨出电话,这样你就可以看到它为你自己
http://www.mediafire.com/?img6dg5y9ri5c7rrtcajwc5ycgpo2nf
你只需要换audioSource = MediaRecorder.AudioSource.MIC;到audioSource = MediaRecorder.AudioSource.VOICE_CALL;第118行TService.java
如果您遇到任何错误,请告诉我.任何与之相关的建议都将被接受.
我知道$ emit在DOM树上发送消息,$ broadcast发送消息.
如何在兄弟DOM元素之间发送消息 - 我该怎么做?
我正在编写客户端/服务器应用程序,但实际上找不到符合我需要的指南.在我开始之前,我自己做这件事会让我遇到许多设计缺陷.例如,服务器应该每秒多次更新每个客户端的状态.我假设我不能单独更新每个客户端,但UDP广播应该解决这个问题.但是我仍然需要一个TCP通道来与每个客户端可靠地通信,例如:聊天消息,用户输入等.
研究这个主题似乎服务器可以同时使用这两种协议 - 但只能是可能的(不是敏感的).没有人建议采用这种方法,事实上我从这篇文章中得知,使用这两种方法相当糟糕.
现在我对如何处理服务器中的数据非常困惑.除非我完全误解了丢包的内容,否则我想保证导致'server-request-packets'的用户输入不会丢失.关于保证使用UDP传递的所有关于SO的答案都说使用TCP.更令人沮丧的是,我能想象的每个服务器/客户端程序至少需要保证传递的一些消息(例如'disconnect'消息?).
我应该使用UDP,TCP,还是我只是在想这个问题?
我正在开发一个在后台作为服务运行的网络监视器应用程序.屏幕打开或关闭时是否可以收到通知/电话?
它通过使用以下代码存在于Android中:
private void registerScreenOnOffReceiver()
{
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(screenOnOffReceiver, filter);
}
Run Code Online (Sandbox Code Playgroud)
然后在打开/关闭屏幕时调用screenOnOffReceiver.iOS有类似的解决方案吗?
编辑: 到目前为止我发现的最好的是UIApplicationProtectedDataWillBecomeUnavailable(检测iPhone屏幕是否打开/关闭),但它要求用户在设备上启用数据保护(密码保护).
我在网络编程方面经验不足,我正在编写一个多平台系统,要求每个设备能够在同一个局域网内找到其他设备.我正在寻找正确的方法来做到这一点,并希望这里的人们可以给出一个很好的建议.这是我的设计要求:
我使用的是C++,解决方案需要跨平台,至少能够在iOS,Windows,Android上运行.
如果可能的话,系统应该非常轻,并且在没有特殊设置或网络要求的情况下工作.
以下是我正在考虑的不同方法:
使用uPnP协议,但我对它不是很熟悉,似乎没有很多关于这个主题的代码示例.
使用传统的套接字方法,在每个设备上创建服务器/客户端,并将数据包发送到LAN中的每个IP.然后手动完成所有事情.如果我错了,纠正我,如果我发送数据包到广播地址,这是否意味着系统自动将我的数据包发送到子网内的每个IP?
使用外部服务器,所有客户端都将注册,然后从该服务器获取有关其他(已注册)客户端的信息.但是,我不确定每个客户端应该连接哪些信息以确定它们位于同一LAN中.
让我知道我在想什么是有意义的.任何意见是极大的赞赏.
我必须为这个应用程序实现一个功能,它包括一个Activity和一个Service在后台工作(它实现Service,而不是IntentService).
我在互联网上经历了一些应该工作的教程,他们都使用了LocalBroadcastManager,顺便说一句是Android推荐的:
如果您不需要跨应用程序发送广播,请考虑使用此类
LocalBroadcastManager而不是下面描述的更一般的工具.
我真的失去了一天,找出问题,为什么它对我不起作用:它只有在我使用时才有效Context.sendBroadcast().而Context.registerReceiver()不是LocalBroadcastManager方法.
现在我的应用程序正在运行,但我觉得我反对最佳做法,我不知道为什么.任何想法为什么会发生?
编辑:
在我写完这个问题后,我进一步研究了这个问题.LocalBroadcastManager通过Singleton工作,我们应该调用LocalBroadcastManager.getInstance(this).method().我记录了两个实例(在Activity和中Service)并且它们具有不同的内存地址.现在我来到了另一个问题,应该不是一个Service具有相同Context的Activity调用它?从这篇文章中,一个服务在主线程上运行,因此我认为Context它将是相同的.
有什么想法吗?(对不起,长篇文章)
代码示例:
为MyService
public class MyService extends Service {
...
// When an event is triggered, sends a broadcast
Intent myIntent = new Intent(MainActivity.MY_INTENT);
myIntent.putExtra("myMsg","msg");
sendBroadcast(myIntent);
// Previously I was trying:
// LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(myIntent);
}
Run Code Online (Sandbox Code Playgroud)
MyActivity
public class …Run Code Online (Sandbox Code Playgroud) 我正在"停泊"一个在已知端口上执行UDP广播心跳的应用程序.这是在各种主机上使用docker-engine-1.7.0(Fedora,Centos7,SLES 12).
我注意到docker主机上的'docker0'桥接器和容器内的'eth0'都有一个0.0.0.0的广播地址.
假设主机上有admin权限,我可以在docker0上手动设置广播地址.同样在容器中(如果容器正在运行特权或使用NET_ADMIN,NET_BROADCAST),但我很好奇为什么默认情况下不设置广播地址.我是否缺少一个配置选项让Docker自动执行此操作?
主办:
# ifconfig docker0 broadcast 172.17.255.255 up
# tcpdump -i docker0 -p 5000
Run Code Online (Sandbox Code Playgroud)
容器:
# ifconfig eth0 broadcast 172.17.255.255 up
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast
Run Code Online (Sandbox Code Playgroud)
一旦设置了广播地址,从主机到容器的广播也可以工作.
我用这段代码发送UDP广播消息
$ip = "255.255.255.255";
$port = 8888;
$str = "DEVICE_DISCOVERY";
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_sendto($sock, $str, strlen($str), 0, $ip, $port);
socket_recvfrom($sock, $buf, 20, 0, $ip, $port);
echo "Messagge : < $buf > , $ip : $port <br>";
socket_close($sock);
Run Code Online (Sandbox Code Playgroud)
我想要一些特定的网络设备(在我的例子中是一些带有以太网屏蔽的Arduino板)用特定的消息进行响应.
代码可以工作,但是这样我就无法打印所有响应,只能打印一个.