一般来说,我对 net-mdns 和 mDNS 很陌生,所以我现在对该协议的工作原理只有一个基本的了解,我希望这个问题是不言自明的。
到目前为止,我已经看到了一些如何使用 net-mdns 宣传服务的示例,但我真正需要的是广播主机名别名,以便我的计算机可以解析为“mybox.local”和“othername.local” (如果“othername.local”是一个实际的 DNS 别名,那就太好了,但这并不重要,A 记录就可以了)。
我发现这个脚本基本上可以满足我的要求,但是
我似乎在文档中找不到任何关于广播主机名的提及:我临时做了一点,阅读了一些源代码,但到目前为止还没有成功。
任何帮助将不胜感激,谢谢。
我想知道有什么方法可以禁用来自节点 A 的 UDP 广播数据包,使其不被节点 A 本身接收。
对于广播,我只是使用INADDR_BROADCAST,在接收端我使用AI_PASSIVE | AI_NUMERICHOST。
我正在尝试编写一个简单的信使,将广播消息发送到本地网络中的所有计算机。该代码适用于Windows 7,Ubuntu 14.10,但是当我尝试在Windows 10上使用它时,它甚至不发送udp包来广播,它什么也不做(用wireshark检查,没有传出包)
import socket
import sys
import traceback
dest=('<broadcast>',10100)
UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
UDPSock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while True:
data = raw_input("Enter message to send or type 'exit': ")
UDPSock.sendto(data, dest)
if data == "exit":
break
UDPSock.close()
Run Code Online (Sandbox Code Playgroud) 我有一个主应用程序,我们将其称为“app”,然后将子模块称为“module1”和“module2”。这些模块是“应用程序”的依赖项。“app”启动“module1”,它完成其工作,完成后,它会广播一条消息,该消息应该由“app”接收,以便它可以继续其流程。但是,我似乎没有在“应用程序”中成功接收它。
我想知道,是否有可能从子模块发送广播消息?
这些模块应该尽可能保持独立于主应用程序,以便也可以与其他应用程序一起使用,例如插件。这就是为什么我没有在主应用程序的清单中添加与模块相关的任何内容。模块有自己的清单。
广播在模块内工作正常。
代码非常简单:
public class MyReceiver extends BroadcastReceiver {
mFilter = new IntentFilter("com.myapp.main.CUSTOM_INTENT");
mReceiver = new MyReceiver();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(Constants.TAG, "receiver worked");
}
// constructor
public MyReceiver(){
}
}
Run Code Online (Sandbox Code Playgroud)
在清单中:
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.myapp.main.CUSTOM_INTENT" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在子模块中:
Intent intent = new Intent("com.myapp.main.CUSTOM_INTENT");
intent.putExtra("value", 0);
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud) 我用的是laravel 5.3
我创建了一个在线商店网站。
如果用户登录并选择产品,然后单击“确定”按钮,图标购物车中将会有实时通知。
我的代码如下所示:
如果用户选择产品和确定按钮,它将运行此功能:
public function addNotificationCart()
{
Notification::send(auth()->user(), new CartNotification($cart));
}
Run Code Online (Sandbox Code Playgroud)
然后 :
public function toBroadcast($notifiable) {
return new BroadcastMessage([
'id' => $this->data->id,
'time' => $this->data->created_at,
'group' => 'cart'
]);
}
Run Code Online (Sandbox Code Playgroud)
我的 JavaScript 代码如下所示:
Echo.private('App.User.' + window.Laravel.authUser.id).notification((notification) => {
// run this statement if exist notification
})
Run Code Online (Sandbox Code Playgroud)
如果代码运行,它就有效
我想在我的网站上添加一个新功能。所以当用户未登录时,用户也可以添加购物车,并且会显示通知购物车
对我来说重要的是我如何去做?
在这个部分 :
Notification::send(auth()->user(), new CartNotification($cart));
Run Code Online (Sandbox Code Playgroud)
和 :
window.Laravel.authUser.id
Run Code Online (Sandbox Code Playgroud)
它需要记录用户数据和 ID
如果用户没有登录,如何填写?
首先,我创建了一个BroadcastReceiver空体。然后,我将其添加到 AndroidManifest.xml 中。但我发现BroadcastReceiver在清单中声明并没有收到任何广播。我通过以下方式发送广播
sendOrderedBroadcast(new Intent("com.example.action"), null)
Run Code Online (Sandbox Code Playgroud)
或者
adb shell am broadcast -a com.example.action
Run Code Online (Sandbox Code Playgroud)
这两种方法都适用于Android 7,但不适用于Android 8。但是,如果BroadcastReceiver通过 声明registerReceiver,则仍然可以接收广播。
另一方面,android.hardware.usb.action.USB_DEVICE_ATTACHED在 Android 7 和 8 上运行良好。
我想问为什么会出现这种情况?我已经在模拟器和物理设备中对其进行了测试。他们有相同的行为。
AndroidManifest.xml
...
<receiver
android:name=".device.UsbBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="com.example.action" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</receiver>
...
Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用Vuetify (Vue.js) 作为前端的应用程序,它与 api 通信到Laravel后端服务器。
我正在尝试使用laravel-echo-server和socket.io制作一个通知系统。并在客户端中使用 laravel-echo。
我用于客户端组件以测试连接是否有效的代码是:
// Needed by laravel-echo
window.io = require('socket.io-client')
let token = this.$store.getters.token
let echo = new Echo({
broadcaster: 'socket.io',
host: 'http://localhost:6001',
auth: {
headers: {
authorization: 'Bearer ' + token,
'X-CSRF-TOKEN': 'too_long_csrf_token_hardcoded'
}
}
})
echo.private('Prova').listen('Prova', () => {
console.log('IT WORKS!')
})
Run Code Online (Sandbox Code Playgroud)
这是代码 laravel-echo-server.json
{
"authHost": "http://gac-backend.test",
"authEndpoint": "/broadcasting/auth",
"clients": [],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": …Run Code Online (Sandbox Code Playgroud) 我在单独的 py 文件中设置了广播变量,然后将其导入到包含 UDF 的文件中。但是当我尝试在 UDF 中使用此变量时,我发现广播变量在某些转换函数的范围内使用时未初始化(NoneType)Dataframe。这是支持代码。
广播模型的utils.py定义如下,
class Broadcaster(object):
_map = {}
_bv = None
@staticmethod
def set_item(k, v):
Broadcaster._map[k] = v
@staticmethod
def broadcast(sc):
Broadcaster._bv = sc.broadcast(Broadcaster._map)
@staticmethod
def get_item(k):
val = Broadcaster._bv.value
return val.get(k)
Run Code Online (Sandbox Code Playgroud)
这样做的原因是提供一个可以在广播之前设置多个 k,v 组合的接口。这意味着,在我的 中main.py,我现在可以Broadcaster.set_item(k, v)多次调用,然后最终调用Broadcaster.broadcast(sc),效果很好。但现在,我想在 UDF 中使用这个广播变量,它位于一个单独的文件中(例如udfs.py)。请注意,这些 UDF 在我的处理中使用Dataframe。下面是一个示例 UDF,
def my_udf(col):
bv = Broadcaster._bv.value #this throws exception :-(
#more code
Run Code Online (Sandbox Code Playgroud)
在我的udfs.py文件中,访问Broadcaster._bv.value. 只是当在 udf 中使用并且从内部调用此 …
python broadcast user-defined-functions apache-spark pyspark
我有一个关于 的背景下的侧面输入和广播的一般性问题Apache Beam。期间计算所需的任何其他变量、列表、映射是否processElement需要作为辅助输入传递?如果它们作为普通构造函数参数传递可以吗DoFn?例如,如果我有一些固定(未计算)值变量(常量,如开始日期、结束日期),我想在processElement. PCollectionView现在,我可以分别从每个变量中创建单例,并将它们DoFn作为侧面输入传递给构造函数。但是,我可以不这样做,而只是将每个常量作为普通构造函数参数传递给 吗DoFn?我在这里错过了一些微妙的东西吗?
就代码而言,我什么时候应该这样做:
public static class MyFilter extends DoFn<KV<String, Iterable<MyData>> {
// these are singleton views
private final PCollectionView<LocalDateTime> dateStartView;
private final PCollectionView<LocalDateTime> dateEndView;
public MyFilter(PCollectionView<LocalDateTime> dateStartView,
PCollectionView<LocalDateTime> dateEndView){
this.dateStartView = dateStartView;
this.dateEndView = dateEndView;
}
@ProcessElement
public void processElement(ProcessContext c) throws Exception{
// extract date values from the singleton views here and use them
Run Code Online (Sandbox Code Playgroud)
与以下相反:
public static class MyFilter extends DoFn<KV<String, Iterable<MyData>> { …Run Code Online (Sandbox Code Playgroud) dataflow broadcast data-processing google-cloud-dataflow apache-beam
我正在尝试学习编写套接字(在Python 3中),我只是尝试从服务器发送广播并从客户端接收它。
我的问题是,每当我尝试将数据包发送到 255.255.255.255 时,似乎实际上没有发送任何内容。我尝试使用wireshark查找数据包,但除了环回接口外,我找不到任何数据包。
手动输入IP就可以在两台电脑之间成功发送消息,并且在wireshark中也看到了数据包。
这是客户端的代码
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.bind(("0.0.0.0", 5005))
while True:
# sock.sendto(bytes("hello", "utf-8"), ip_co)
data, addr = sock.recvfrom(1024)
print(data)
Run Code Online (Sandbox Code Playgroud)
这是服务器的代码
import socket
from time import sleep
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # UDP
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# sock.settimeout(2)
while True:
sock.sendto(bytes("test", "utf-8"), ("255.255.255.255", 5005))
sleep(1)
main()
Run Code Online (Sandbox Code Playgroud)
抱歉,如果代码很难看,我对套接字和 python 非常陌生。