Example/Explanation 在 chrome.sockets.udp 多播
Example/Explanation on chrome.sockets.udp multicasting
我正在制作一个 Chrome 应用程序,它将具有 'chat' 功能(例如 this app has). When a user joins the chat (by connecting to a port), the user would receive all messages that were created during his/her session. However, although I understand most of the app's code,我不明白代码的多播部分是如何工作的。
据我了解,它应该是这样的:
var socket = 0;
chrome.sockets.udp.create({bufferSize: 1024 * 1024}, function (createInfo) //Create socket entry
{
socket = createInfo.socketId;
console.log(socket); //This works - tells me an integer
var ttl = 12;
chrome.sockets.udp.setMulticastTimeToLive(socket, ttl, function (result)
{
if(result < 0)
{
console.log("MULTICAST FAILED" + result);
}
else
{
chrome.sockets.udp.bind(socket, "0.0.0.0", 8080, function(result) //Bind to socket
{
if(result < 0)
{
console.log("BIND FAILED" + result);
chrome.sockets.udp.close(socket);
}
else
{
chrome.sockets.udp.joinGroup(socket, "237.132.123.123", function(result) //join Multicast group
{
if(result < 0)
{
console.log("Couldn't join Group!");
chrome.sockets.udp.close(socket);
}
else
{
console.log("GOT HERE"); //Outputs this
chrome.sockets.udp.onReceive.addListener(function(msg) //Listen for receiving messages
{
console.log(msg.socketId);
})
chrome.sockets.udp.onReceiveError.addListener(function(error) //If error while receiving, do this
{
console.log(error.socketId + " " + error.resultCode);
});
}
})
}
});
}
})
})
//Later in the code (linked to a button I press (and when app closes)
chrome.sockets.udp.close(socket);
这个问题是,虽然代码到达了.send()的回调函数(这应该意味着它发送成功),但我在绑定时也出现错误,说套接字不存在(虽然我创建它并且套接字号输出一个整数)。当我使用与上面相同的代码创建两个应用程序并尝试使它们彼此 listen/send 时,都没有收到消息。
有人可以提供一个清楚的示例(没有 gui 代码,没有运行时消息传递)来说明如何使用较新的 chrome.sockets.udp 正确进行多播吗?
只是不得不处理这个问题,如果您将其包含在您的清单中,您的代码应该可以工作:
"sockets": {
"udp": {
"send": ["*"],
"bind": ["*"],
"multicastMembership": [""]
}
}
如果您已经这样做,请尝试更改您的端口/地址,以防您的网络已经在使用它们。如果仍然不起作用,请尝试删除 create() 上的选项,看看是否有任何反应。
对不起,如果我来晚了。
我正在制作一个 Chrome 应用程序,它将具有 'chat' 功能(例如 this app has). When a user joins the chat (by connecting to a port), the user would receive all messages that were created during his/her session. However, although I understand most of the app's code,我不明白代码的多播部分是如何工作的。
据我了解,它应该是这样的:
var socket = 0;
chrome.sockets.udp.create({bufferSize: 1024 * 1024}, function (createInfo) //Create socket entry
{
socket = createInfo.socketId;
console.log(socket); //This works - tells me an integer
var ttl = 12;
chrome.sockets.udp.setMulticastTimeToLive(socket, ttl, function (result)
{
if(result < 0)
{
console.log("MULTICAST FAILED" + result);
}
else
{
chrome.sockets.udp.bind(socket, "0.0.0.0", 8080, function(result) //Bind to socket
{
if(result < 0)
{
console.log("BIND FAILED" + result);
chrome.sockets.udp.close(socket);
}
else
{
chrome.sockets.udp.joinGroup(socket, "237.132.123.123", function(result) //join Multicast group
{
if(result < 0)
{
console.log("Couldn't join Group!");
chrome.sockets.udp.close(socket);
}
else
{
console.log("GOT HERE"); //Outputs this
chrome.sockets.udp.onReceive.addListener(function(msg) //Listen for receiving messages
{
console.log(msg.socketId);
})
chrome.sockets.udp.onReceiveError.addListener(function(error) //If error while receiving, do this
{
console.log(error.socketId + " " + error.resultCode);
});
}
})
}
});
}
})
})
//Later in the code (linked to a button I press (and when app closes)
chrome.sockets.udp.close(socket);
这个问题是,虽然代码到达了.send()的回调函数(这应该意味着它发送成功),但我在绑定时也出现错误,说套接字不存在(虽然我创建它并且套接字号输出一个整数)。当我使用与上面相同的代码创建两个应用程序并尝试使它们彼此 listen/send 时,都没有收到消息。
有人可以提供一个清楚的示例(没有 gui 代码,没有运行时消息传递)来说明如何使用较新的 chrome.sockets.udp 正确进行多播吗?
只是不得不处理这个问题,如果您将其包含在您的清单中,您的代码应该可以工作:
"sockets": {
"udp": {
"send": ["*"],
"bind": ["*"],
"multicastMembership": [""]
}
}
如果您已经这样做,请尝试更改您的端口/地址,以防您的网络已经在使用它们。如果仍然不起作用,请尝试删除 create() 上的选项,看看是否有任何反应。
对不起,如果我来晚了。