Chrome UDP 套接字未从远程计算机接收
Chrome UDP sockets not receiving from remote machine
我正在开发一个包含以下代码的 Google Chrome 应用程序:
var socket = chrome.sockets.udp;
var PORT = 5005;
var HOST = '127.0.0.1';
socket.create({}, function(sockInfo){
socket.bind(sockInfo.socketId, HOST, PORT, function(result){
socket.onReceive.addListener(function(info){
// do stuff with the packet data
});
});
});
当我从本地主机循环发送数据时,这种机制工作得很好。但是,当我尝试从远程机器发送时,onReceive.addListener 回调函数永远不会被调用。起初我以为这可能是本地网络问题,但当我 tcpdump -vv udp port 5005
它读取我发送的数据时,我知道它到达了我的机器。这让我相信这是一个 Chrome 问题...在我的 manifest.json 文件中,我为 UDP 设置了通用 "bind" 和 "send" 权限,所以我看不到为什么这不起作用。有什么想法吗?
François Beaufort 现已删除的答案提供了一个有用的建议,遗憾的是,其方式更适合发表评论。我正在将其设为社区 Wiki,这样他就不会觉得自己名誉扫地了。
HOST
部分表示您正在监听哪个接口的数据。将其设置为 127.0.0.1
意味着您只监听环回接口,无法从外部访问。
您可以提供您拥有的网络接口的明确 IP 地址,但更简单的解决方案是说“我想全部监听”。
引自the docs:
Use "0.0.0.0"
to accept packets from all local available network interfaces.
这应该可以解决你的问题;通常,还需要检查防火墙是否允许请求通过;你已经做到了。
我正在开发一个包含以下代码的 Google Chrome 应用程序:
var socket = chrome.sockets.udp;
var PORT = 5005;
var HOST = '127.0.0.1';
socket.create({}, function(sockInfo){
socket.bind(sockInfo.socketId, HOST, PORT, function(result){
socket.onReceive.addListener(function(info){
// do stuff with the packet data
});
});
});
当我从本地主机循环发送数据时,这种机制工作得很好。但是,当我尝试从远程机器发送时,onReceive.addListener 回调函数永远不会被调用。起初我以为这可能是本地网络问题,但当我 tcpdump -vv udp port 5005
它读取我发送的数据时,我知道它到达了我的机器。这让我相信这是一个 Chrome 问题...在我的 manifest.json 文件中,我为 UDP 设置了通用 "bind" 和 "send" 权限,所以我看不到为什么这不起作用。有什么想法吗?
François Beaufort 现已删除的答案提供了一个有用的建议,遗憾的是,其方式更适合发表评论。我正在将其设为社区 Wiki,这样他就不会觉得自己名誉扫地了。
HOST
部分表示您正在监听哪个接口的数据。将其设置为 127.0.0.1
意味着您只监听环回接口,无法从外部访问。
您可以提供您拥有的网络接口的明确 IP 地址,但更简单的解决方案是说“我想全部监听”。
引自the docs:
Use
"0.0.0.0"
to accept packets from all local available network interfaces.
这应该可以解决你的问题;通常,还需要检查防火墙是否允许请求通过;你已经做到了。