1

我正在使用 chrome 网络 API 打开一个 UDP 套接字,该套接字应该既监听又发送数据(服务器和客户端)。这就是为什么我使用带有bind/ sendTo/的服务器方式recvFrom

但是,我无法将数据发送到本地主机以外的其他主机:请参见下面的示例。代码错误-109 对应ADDRESS_UNREACHABLE

chrome.socket.create('udp', function(socketInfo) {

  var socketId = socketInfo.socketId;

  chrome.socket.bind(socketId, '127.0.0.1', 3008, function(s) {

    chrome.socket.getInfo(socketId, function(info) {
      console.log(info);
      // {connected: false, localAddress: "127.0.0.1", localPort: 3008, socketType: "udp"} 
    });

    var arr = new Uint8Array(1);
    arr[0] = 123;
    var ab = arr.buffer;

    chrome.socket.sendTo(socketId, ab, "127.0.0.1", 3007, function(sendResult) {
      console.log("sendTo", sendResult);
      //sendTo {bytesWritten: 1}
    });
    chrome.socket.sendTo(socketId, ab, "google.com", 3007, function(sendResult) {
      console.log("sendTo", sendResult);
      //sendTo {bytesWritten: -109}
    });
  });
});

我的权限限制较少:udp-send-toudp-bind.

使用connect/write方式有效,但这不是我想要实现的,因为我试图同时打开一个套接字而不是服务器和客户端。

任何的想法 ?

4

2 回答 2

2

我能够通过将套接字绑定到0.0.0.0而不是127.0.0.1.

chrome.socket.bind(socketId, '0.0.0.0', 3008, function(s) {
  //.. and so on
});

这也许就是@EJP 在他的回答中的意思。我通过浏览此线程找到了解决方案。

于 2013-03-17T22:01:25.863 回答
1

如果将套接字绑定到 127.0.0.1,它只能发送和接收到本地主机。所以不要那样做。使用默认值。

于 2013-03-04T08:33:47.467 回答