标签: broadcast

对于UDP广播专家:通过WiFi实现高带宽音频UDP广播的问题(802.11N和802.11G)

我正在尝试通过专用网络上的UDP广播,通过WiFi将多声道音频从一台服务器发送到多台客户端计算机.

我使用名为Pure Data的软件,使用名为netsend~和netreceive~的UDP广播工具.代码在这里:http: //www.remu.fr/sound-delta/netsend ~/

简而言之,我能够在点对点网络中向一台客户端计算机发送9个频道,但是当我尝试向2个客户端播放广播时(尚未尝试更多),我得到了没有声音.我可以压缩音频,并通过UDP广播将4个压缩的信道(大约10%未压缩的大小)成功发送到2个客户端.或者我可以通过UDP广播向1个客户端发送1个频道,但有一些故障.

WiFi路由器是Linksys WRT300N.所有计算机都运行Windows XP.IP地址为192.168.1.x,子网掩码为255.255.255.0,子网广播地址为192.168.1.255.

我很好奇 - 路由器中的UDP广播包会发生什么?如果我的子网掩码为255.255.255.0,那么路由器是否会为广播地址发送的每个数据包生成254个数据包?

我的WiFi带宽至少为100Mbps,但我似乎无法通过UDP广播向多个客户端发送超过10Mbps的音频.

是什么阻止我将音频发送到WiFi的带宽限制?

有关套接字代码修改,网络设置,路由器设置,子网修改的任何建议......非常感谢!

谢谢尼克

udp bandwidth broadcast subnet wifi

5
推荐指数
2
解决办法
8538
查看次数

广播接收器和MainActivity之间的Android通信(将数据发送到活动)

我有这必须停止,直到接收到短信......一个简单的主要活动如何从启动方法MainActivity的范围内BroadcastReceiveronReceive()方法?

有信号和等待吗?我是否可以通过待处理的内容Intent,或者如何实现此通信?

sdk android broadcast android-activity

5
推荐指数
1
解决办法
1万
查看次数

ping广播地址有问题

当我尝试ping我的LAN上的广播地址时,它每次只显示来自3个主机的ICMP回复,即使有许多主机连接到LAN.

对于广播地址,我做到了

$ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:1b:38:09:0b:26  
          inet addr:172.30.120.152  Bcast:172.30.127.255  Mask:255.255.248.0
          inet6 addr: fe80::21b:38ff:fe09:b26/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:831096 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13022 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:66620362 (66.6 MB)  TX bytes:3099025 (3.0 MB)
          Interrupt:21 Base address:0x2000 
Run Code Online (Sandbox Code Playgroud)

我使用Bcast addr 172.30.127.255来ping每个人......

$ping -b 172.30.127.255
WARNING: pinging broadcast address
PING 172.30.127.255 (172.30.127.255) 56(84) bytes of data.
64 bytes from 172.30.120.1: icmp_seq=1 ttl=255 time=0.809 ms
64 bytes from 172.30.120.62: icmp_seq=1 ttl=64 time=1.06 …
Run Code Online (Sandbox Code Playgroud)

networking ping broadcast icmp

5
推荐指数
1
解决办法
9953
查看次数

如何将活动带到前台(或创建,如果不存在)?

我正在拦截带有一些信息的短信.然后在我的SmsListener中,我正在创建状态栏中显示的通知.然后,当用户点击我想要的通知时

  1. 将MainActivity带到前台(如果此类活动尚不存在,则应创建它)
  2. 从短信传递数据
  3. 根据此MainActivity中的此数据执行一些ui更改

我的活动被定义为

    <activity
        android:name=".MainActivity"
        android:screenOrientation="sensor"
        android:label="@string/app_name"
        android:launchMode="singleTask"/>
Run Code Online (Sandbox Code Playgroud)

活动启动为

 Intent i = new Intent();
 i.setClass(context, MainActivity.class);
 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(i);
Run Code Online (Sandbox Code Playgroud)

同样在我的活动中,我已经重写了onNewActivity方法

 @Override
 public void onNewIntent(Intent intent){
    super.onNewIntent(intent);

    // I have data from broadcast in intent variable passed to this activity
    processDataFromBroadcast(intent);
}
Run Code Online (Sandbox Code Playgroud)

如果MainActivity已经存在,它可以正常工作,但是如果MainActivity不存在则会启动但是不会调用onNewIntent

然后我尝试从onCreate调用processDataFromBroadcast : processDataFromBroadcast(getIntent()). 第一次将数据从我的广播正确传递到活动.但是,如果MainActivity被发送到后台然后再次被带到前台,则调用onCreate或onNewIntent,并且再次执行processDataFromBroadcast,并通过广播发送意图,因此我的MainActivity会在应用程序带到前台时每次使用广播数据进行更新 - 后者是不需要的,我怎么能让我的活动在第一次处理后忘记这个意图. 这是示例应用程序.

android broadcast task android-activity

5
推荐指数
1
解决办法
6298
查看次数

android:从应用程序代码中检测应用程序的重新安装

有没有办法在重新安装时检测应用程序代码.

我看到可以通过收听广播接收器中的PACKAGE_REPLACED事件来检测市场上的应用更新.但是,如果从编辑器(eclipse)重新安装应用程序,则这些事件不会传递给应用程序.

我的要求是我禁用了一个组件(Launcher活动).如果未启用,则应用安装将失败.每次重新安装之前我想启用此组件.

我在谈论重新安装之前在市场上发布.在开发时,每次重新安装应用程序以测试一些修改时,我想从我的应用程序中检测到这一点并启用组件.

android broadcast reinstall

5
推荐指数
1
解决办法
1717
查看次数

Android TCP服务器广播

我正在开发一个使用TCP进行设备连接的Android应用程序.问题是我是套接字编程的新手.我已成功制作了服务器和客户端代码.每个客户端都可以连接到服务器,服务器可以回复客户端.但我似乎无法使服务器同时向所有连接的客户端发送消息.使服务器向客户端广播消息的步骤是什么?这是服务器代码:

ServerSocket server = null;
try {
    server = new ServerSocket(9092); // start listening on the port
} catch (IOException e) {
    Log.d("btnCreate onClick", "Could not listen on port: 9092");
}
Socket client = null;
while(true) {
    try {
        client = server.accept();
    } catch (IOException e) {
        Log.d("btnCreate onClick", "Accept Failed");
    }
    //start a new thread to handle this client
    Thread t = new Thread(new ClientConn(client));
    t.start();
}
Run Code Online (Sandbox Code Playgroud)

和服务器线程:

class ClientConn implements Runnable {
    private Socket client;

    ClientConn(Socket client) { …
Run Code Online (Sandbox Code Playgroud)

android tcp broadcast

5
推荐指数
1
解决办法
2303
查看次数

是否可以从通知操作发送LocalBroadcast?

我想在点击通知中的按钮时发送LocalBroadcast.我知道如何通过常规广播来做到这一点,但我想将广播保留在我的应用程序中.这可能吗?

我的代码大致是:

NotificationCompat.Builder notificationBuilder  = new NotificationCompat.Builder(context)
    .setContentTitle("Title")
    .setContentText("content")
    .setSmallIcon(R.drawable.icon1)
    .setContentIntent(pIntent)
    .setAutoCancel(true);


Intent myButtonIntent = new Intent(BUTTON_PRESSED);

// the following line gives me a normal broadcast, not a LocalBroadcast
PendingIntent myButtonpIntent = PendingIntent.getBroadcast(context, 12345, myButtonIntent, PendingIntent.FLAG_UPDATE_CURRENT);  
notificationBuilder.addAction(R.drawable.icon2, "OK", myButtonpIntent);
Notification notification = notificationBuilder.build();
NotificationManager notificationManager = 
    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Run Code Online (Sandbox Code Playgroud)

并且:

BroadcastReceiver bReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(BUTTON_PRESSED)) {
            // do something
        }
    }
};

LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter(); …
Run Code Online (Sandbox Code Playgroud)

notifications android broadcast android-pendingintent

5
推荐指数
1
解决办法
695
查看次数

在单例中使用广播变量的优缺点是什么?

据我了解,广播变量只创建一次,但多次使用.所以我发现我应该在单例类中创建一个广播变量,这是一个坏主意吗?使用单例类来保存广播变量的优缺点是什么?

java broadcast apache-spark

5
推荐指数
1
解决办法
298
查看次数

Android BroadcastReceiver in Service在向其发送广播时给出空指针异常

我的服务中有一个广播接收器,当我从我的活动发送广播以停止服务时,我收到以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.BroadcastReceiver.onReceive(android.content.Context, android.content.Intent)' on a null object reference
Run Code Online (Sandbox Code Playgroud)

这是我的服务类:

public class PhraseService extends Service{

public static List<Phrase> phrases;
private Context context;

private static final String PHRASE_SERVICE_BROADCAST_ID = "com.cryogenos.safephrase.PHRASE_SERVICE_BROADCAST_ID";
private BroadcastReceiver command_broadcast_receiver;


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    this.context = getApplicationContext();
    LocalBroadcastManager.getInstance(this).registerReceiver(command_broadcast_receiver, new IntentFilter(PHRASE_SERVICE_BROADCAST_ID));

    Log.i("COS", "STARTED SELF");

    /* Handle any command sent by the app here */
    command_broadcast_receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent …
Run Code Online (Sandbox Code Playgroud)

java service android broadcast android-broadcast

5
推荐指数
1
解决办法
6610
查看次数

在Pixel 2和Pixel 2 XL接收UDP广播数据包

我正在开发一个从Wi-Fi摄像机接收UPD广播数据包的应用程序。在我发现在Google Pixel 2 / Pixel 2 XL接收UPD广播数据包问题之前,它曾经很好。

为了弄清原因,我制作了2个测试应用程序:一个是UPD广播发送器(https://senatech.box.com/s/gmhr391pbl32lqai0mhkffyk6j0ckle5),另一个是UDP广播接收器(https://senatech.box.com/ s / abamuor47nlafocs035nfuj90d0uvx0m)。

我已经在某些Android设备上对它们进行了测试,发现Google Pixel 2 / Pixel 2 XL无法接收UDP广播数据包。除Pixel 2 / Pixel 2 XL以外的Android设备都可以正常工作。Android 8.1上的Nexus也可以正常运行。

我尝试搜索类似的问题,但发现了一些问题,例如Android 8.0(https://bugreports.qt.io/browse/QTBUG-64233)未收到的UDP广播数据包。我认为,尽管它是用QT编写的,但这可能是由相同的问题引起的。

这是有关UDP广播发送方的简短代码

public void sendUPDBroadcast() {
   Thread thread = new Thread() {
      @Override
      public void run() {
         DatagramSocket ds = null;
         int port = 0;
         String udpData = "";
         try {         
            port = Integer.parseInt(etPort.getText().toString());
            udpData = etUDPData.getText().toString();
            InetAddress ia = InetAddress.getByName("192.168.255.255");
            ds = new DatagramSocket(port);
            DatagramPacket data = new …
Run Code Online (Sandbox Code Playgroud)

udp broadcast

5
推荐指数
1
解决办法
695
查看次数