chrome.sockets.udp.send()不发送数据(sendInfo.bytesSent == 0)

时间:2014-05-21 01:03:15

标签: javascript google-chrome-app

我在使用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" : "*"
    }
  }
}

对这个问题的任何想法都会非常感激!谢谢!

2 个答案:

答案 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;
}