我正在使用包含以下代码的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
});
});
});
当我从localhost发送循环数据时,这种机制非常有效。但是,当我尝试从远程计算机发送时,onReceive.addListener回调函数永远不会被调用。起初我认为这可能是本地网络问题,但是当我tcpdump -vv udp port 5005
它读取我发送的数据时,我知道它已经到达我的机器。这让我相信它是一个Chrome问题......在我的manifest.json文件中,我设置了通用" bind"和"发送" UDP的权限,所以我不明白为什么这不起作用。有什么想法吗?
答案 0 :(得分:1)
弗朗索瓦·博福特现在删除的答案提供了一个有用的建议,遗憾的是,这种建议更适合评论。我正在把它作为一个社区维基,这样他就不会觉得自己被剥夺了声誉。
HOST
部分表示您正在侦听哪个接口的数据。将其设置为127.0.0.1
意味着您只是在侦听无法从外部访问的环回接口。
您可以提供您所拥有的网络接口的显式IP地址,但更简单的解决方案是说“我想全部听取它们”。
引自the docs:
使用
"0.0.0.0"
接受来自所有本地可用网络接口的数据包。
这应该在你的情况下解决它;一般来说,还需要检查防火墙是否正在通过请求;你已经做到了。