我在使用udp in a chrome app发送数据时遇到问题。
1)我创建了一个在端口6454上侦听的nodejs simple udp服务器:
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("error", function (err) {
console.log("server error:\n" + err.stack);
server.close();
});
server.on("message", function (msg, rinfo) {
console.log("server got: " + msg + " from " +
rinfo.address + ":" + rinfo.port);
});
server.on("listening", function () {
var address = server.address();
console.log("server listening " +
address.address + ":" + address.port);
});
server.bind(6454);
我已经使用另一个nodejs应用程序对服务器进行了测试,但它确实有效。
但是,当我尝试使用chrome.sockets.udp
从Chrome应用程序向此服务器发送一些数据时,它没有:
var address = "127.0.0.1";
var port = 6454;
var data = new ArrayBuffer("some random bytes");
chrome.sockets.udp.create({}, function (socketInfo) {
var socketId = socketInfo.socketId;
chrome.sockets.udp.bind( socketId, "0.0.0.0", 0, function (result) {
chrome.sockets.udp.getInfo( socketId, function(result){
console.log(result);
});
if(result < 0) {
console.log(chrome.runtime.lastError.message);
} else {
chrome.sockets.udp.send( socketId, data, address, port, function (sendInfo) {
if (sendInfo.resultCode < 0) {
console.log(chrome.runtime.lastError.message);
} else {
console.log(sendInfo);
}
});
}
});
});
使用此代码,另一端收到的任何内容和sendInfo对象都是:
bytesSent : 0
resultCode : 0
我在Chrome应用清单上添加了2个通配符:
{
"manifest_version": 2,
"name": "Artnet (udp) test",
"description": "test",
"version": "0.1",
"minimum_chrome_version": "33",
"app": {
"background": {
"scripts": ["chrome_app.js"]
}
},
"sockets": {
"udp": {
"bind" : "*",
"send" : "*"
}
}
}
对这个问题的任何想法都会非常感激!谢谢!
答案 0 :(得分:1)
哎呀,错误来自var data = new ArrayBuffer("some random bytes");
我无法以这种方式初始化ArrayBuffer
,我需要使用Int8Array
。
答案 1 :(得分:0)
var data = str2ab("fdfdfd");
function str2ab(str) {
var buf = new Int8Array(str.length);
for (var i=0, strLen=str.length; i < strLen; i++) {
buf[i] = str.charCodeAt(i);
}
return buf.buffer;
}