问题标签 [broadcast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2752 浏览

android - 在特定时间启动活动

我是 Android 开发的新手,所以我可能会遗漏一些明显的东西。我想Activity在用户的电话时钟达到指定时间(类似于闹钟)时启动。但是,我不确定我将如何去做,因为不断轮询时钟似乎效率低下并且浪费资源。我需要从时钟捕获广播事件,还是使用PendingIntents?如果有人能指出我应该阅读的一些SDK 方法/服务,将不胜感激。谢谢。

0 投票
1 回答
2497 浏览

linux - Ubuntu 9.04 但不是 8.04 的 UDP 广播接收问题

更新

  • 01-27ter:添加了rp_filter信息
  • 01-27bis:请注意,9.04 盒子在不同的界面上工作。
  • 01-27:增加接口配置信息和报文分析。

原帖

我有两个极其相似的硬件配置(SuperMicro 1U 系统,带有双 Xeon CPU 和两个板载以太网端口),一个运行 Ubuntu 8.04(Linux 2.6.24-26-server),一个运行 Ubuntu 9.04(Linux 2.6.28- 17个服务器)。它们都将 eth1 连接到同一个网络,在该网络上,各种其他服务器正在向各种端口发送广播 UDP 数据包。在两台主机上,在 eth1 上使用 tcpdump,我可以看到这些广播 UDP 数据包到达。

然而,虽然在 8.04 机器上我可以让一个简单的程序很好地收听它们,但在 9.04 机器上,一个相同的程序永远不会接收到它们。作为一个高级概述,这里是一个示例 Haskell 程序,它适用于一个但不能适用于另一个(在两者上使用相同版本的 GHC):

如果这个问题在 GHC 中发生了一些非常奇怪的事情(尽管两者的构建相同),我编写了一个 C 程序来做同样的事情:

您会注意到,在这种情况下,只是为了好玩,我还打开了套接字上的 SO_BROADCAST 标志,并确认它已打开,尽管它对程序的行为没有影响,这是相同的. 即使我将构建在 8.04 上的二进制文件复制到 9.04 机器上,反之亦然,在所有情况下,在 8.04 机器上运行的程序都会看到 UDP 广播数据包,而 9.04 机器却看不到。

我究竟做错了什么?

更新 01-27:

这是工作(8.04)主机的 ip link 和 ip ether 的输出:

对于非工作(9.04)服务器:

请注意,对于这两种情况,eth1 是广播到达的端口。

这是程序未接收到的示例广播数据包的完整解码(来自非工作 9.04 服务器上的 tshark):

我已经将此与来自工作 8.04 服务器上的转储中的相同数据包进行了比较,并且数据包本身是相同的;唯一的区别在于帧号(在 pcap 文件中)和接收数据包的时间(1.224 毫秒的差异,考虑到两台主机使用相同的 NTP 服务器,这似乎很高,但并非完全不合理)。

更新 01-27bis

我做了进一步的实验,在 8.04 主机上生成我自己的广播数据包并将它们发送到 9.04 主机,当 8.04 主机发送它们并且它们到达 eth0 或 eth1 时,9.04 主机接收数据包就好了。

更新 01-27ter

sp 3; sysctl -a 2>/dev/null | grep '\.rp_filter' | sort8.04主机上的输出为:

在 9.04 主机上是:

0 投票
1 回答
6413 浏览

delphi - 使用 SO_REUSEADDR 时接收发送到 127.0.0.1 的 UDP 数据包

我正在尝试使一组应用程序使用 UDP 和广播消息相互发现。应用程序将定期发送一个 UDP 数据包,说明他们是谁以及他们可以做什么。最初我们只使用广播到 INADDR_BROADCAST。

所有应用程序共享同一个端口来监听(因此是 SO_REUSEADDR)。事件内核对象附加到套接字,因此当我们可以获取新数据包并在 WaitFor 循环中使用它时,我们会收到通知。套接字使用异步。

打开插座:

将数据发送到指定的地址列表:

接收数据包:

当我们使用 INADDR_BROADCAST、本地广播地址 (192.168.1.255) 或本地 IP 地址发送广播数据时,一切正常。在我们使用 127.0.0.1 “广播”到的那一刻,接收是零星的,但通常不起作用。

有谁知道如何解决这个问题(地址列表是可变的)?如果一切都失败了,我将查找所有本地 IP 地址并用它替换 127.0.0.1 但是当 IP 地址更改时会留下问题。

更新:当你第一次启动 App1 时,App1 会收到数据包。接下来启动 App2。现在 App1 仍会收到数据包,但 App2 不会。如果停止 App1,App2 将开始接收数据包。如果您启动 App3,App2 将收到它的数据包,但 App3 不会。

因此:当使用 127.0.0.1 时,只有一个应用程序会收到数据包。

使用 setsocketopt 将 IPPROTO_IP、IP_MULTICAST_LOOP 设置为 1 也不会改变任何内容。

0 投票
1 回答
412 浏览

flash - 视频广播

为了好玩,我想重新创建http://chatroulette.com/。基本上我需要能够使用闪存将网络摄像头视频从一台计算机流式传输到另一台计算机。

我是闪光灯新手。那里有图书馆吗?

0 投票
1 回答
165 浏览

c++ - 接收客户端通过互联网发送的数据报

我制作了两个控制台应用程序:广播侦听器和 UDP 编写器(仅供练习)。每个都通过互联网在不同的机器上运行。

广播监听器:

udp写手:

案子:

  1. 编写器将一些数据报发送到侦听器服务器(ip:113.169.123.138)。侦听器可以接收这些数据报。

  2. 作者向 255.255.255.255 广播。听众不能接收任何东西。

问题:

  • 我需要做什么才能使案例 2 工作?
0 投票
1 回答
233 浏览

android - Android - 意图以某种方式递增?

我已经开始在我的应用程序中使用自定义意图,但遇到了一些问题。

当我发送自定义意图时,我注册了一个广播接收器,并且我捕捉到了这个意图没有问题。

但是,当我再次发送意图时似乎出现了问题,广播接收器似乎注册了意图的两个事件,依此类推,所以如果第三次发送意图,我会收到 3 次。

这在我的应用程序中造成了重大问题,想知道这是否正常,有什么方法可以解决吗?

这是我的代码:


发送意图:


要接收 Intent:

有没有办法确保 Intent 只被触发一次?

0 投票
4 回答
3025 浏览

c++ - 通过 UDP 接收来自 N 个客户端的响应,以响应广播请求

我正在为特定类型的网络多媒体设备实现一种 IP 查找器。我想找出 LAN 中所有该类型的活动设备,以及它们的 IP 地址和其他详细信息。

设备有自己的设备发现方式。

它的工作原理如下:客户端通过 UDP 在 LAN 上发送广播请求。
目的端口号是固定的。
作为回应,LAN 中所有了解此请求格式的服务器都会响应此请求,提供有关它们自己的信息。

我正在使用 sendto() 广播 UDP 请求消息。

现在我的问题是我不知道有多少设备(即服务器)会响应请求。

我必须调用 recvfrom() 多少次?
我什么时候才能知道我已经处理了所有设备的响应?
或者一般来说,recvfrom() 是从多个服务器接收响应的正确选择吗?
有没有更好的(或正确的,如果我在这里错了)方法来完成同样的事情?

我正在使用 C/C++ 编程,计划同时为 Windows 和 Linux 编写代码。
提前谢谢了。

编辑:因此,在所有网络编程向导的帮助下,我找到了解决问题的方法 :)
select() 对我来说就是这样……
非常感谢所有抽出时间提供帮助的人我

0 投票
2 回答
3838 浏览

c# - 对等网络应用程序的网络发现

我希望有两个类,一个服务器类和一个客户端类。服务器类应该接收每个新客户端的 IP 地址和端口号,并将它们存储在一个列表中。它应该为每个客户端提供已连接客户端及其 IP 地址的列表。然后客户端可以使用 TCP 连接相互通信。

问题是客户端不知道服务器的 IP 地址是什么。然而,整个程序将在局域网上运行。我的猜测是它需要某种 UDP 广播,但每次我试图暗示这一点时它都不起作用,除非程序的两个实例在同一台计算机上运行。

该应用程序将由计算知识有限的客户安装,因此应该只是在所有计算机上安装该程序并插入网络的情况。

如果有人使用 C#.net 3.5 或更早版本对此有可靠、清晰的实现,将不胜感激。

0 投票
1 回答
395 浏览

ruby - Icecast 服务器状态

有谁知道,如何检查 Icecast2 服务器中的广播是在线还是离线?红宝石首选。

0 投票
2 回答
591 浏览

java - 如何在 Java 中通过 UDP 确定数据库服务器 IP

我正在用 Java 编写将数据存储在数据库服务器上的客户端。到目前为止,必须在客户端的设置中手动指定服务器的 IP 和端口。我听说,可以通过广播/多播/UDP自动确定数据库服务器的IP(我不熟悉这些概念)。问题:有没有办法检索本地网络中所有可用数据库服务器的 IP 地址?到目前为止,我正在使用 h2 数据库系统。

再见,沃尔夫冈