我想創建一個僅用於局域網的Chrome打包應用程序,其中一個實例充當服務器(會話主機),其他實例必須發現服務器並加入會話。這可以通過chrome.socket實現嗎?chrome.socket如何用於廣播或多播?
我已經建立了服務器這樣的:
var socket = chrome.socket || chrome.experimental.socket;
socket.create('udp', {}, function(createInfo) {
var publish_socket = createInfo.socketId;
socket.bind(publish_socket, '225.0.0.42', 42424, function (result) {
if (result < 0) console.error(result); // this works fine
socket.recvFrom(publish_socket, null, function(recvFromInfo) {
console.log(recvFromInfo); // UNABLE TO MAKE THIS HAPPEN
});
});
// Chrome won't let me listen for app window closing
var cleanup_timer;
cleanup_timer = setInterval(function(){
if (requesting_window.closed) {
socket.destroy(publish_socket);
clearInterval(cleanup_timer);
}
},
5000
);
});
套接字綁定,我可以看到它在ss -ua
:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 225.0.0.42:42424 *:*
但是服務器似乎從來沒有收到任何數據。我曾嘗試使用發送和nc -uv 225.0.0.42 42424
一些數據chrome.socket API,但沒有成功:
socket.create('udp', {}, function(socketInfo) {
var socketId = socketInfo.socketId;
socket.sendTo(socketId, str2ab("discovering"), '225.0.0.42', 42424, function(writeInfo) {
if (writeInfo.bytesWritten < 0) console.error(writeInfo);
});
});
這將導致錯誤代碼-15
在客戶端並沒有什麼在服務器端。
我懷疑應該有一個多播標誌設置的地方,但我找不到它。
我使用的Chrome版本23.0.1246.0開發
[也許這個鏈接可以幫助你(https://github.com/KensakuKOMATSU/chrome-upnp)。 –
@Cicada感謝您的鏈接。我在'sendTo'行之前添加了'socket.bind(socketId,「0.0.0.0」,0,function(res){...})',並在發送數據時停止抱怨。不幸的是,我仍然不知道如何**多播包。 – hlidka