我正在开发一个包含以下代码的 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)”和“发送”权限,所以我不明白为什么这不起作用。有什么想法吗?
最佳答案
弗朗索瓦·博福特现已删除的答案提供了一个有用的建议,遗憾的是以一种更适合评论的方式。我将其设为社区维基,这样他就不会感到声誉被剥夺。
HOST
部分指示您正在监听哪个接口(interface)以获取数据。将其设置为 127.0.0.1
意味着您仅监听环回接口(interface),无法从外部访问该接口(interface)。
您可以提供您拥有的网络接口(interface)的显式 IP 地址,但更简单的解决方案是说“我想监听所有这些”。
引自the docs :
Use
"0.0.0.0"
to accept packets from all local available network interfaces.
这应该可以解决你的情况;一般来说,还需要检查防火墙是否允许请求通过;你已经做到了。
关于javascript - Chrome UDP套接字未从远程计算机接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30896044/