1

ChromeネットワークAPIを使用して、データ(サーバーとクライアント)のリッスンと送信の両方を行うUDPソケットを開いています。だから私は//でサーバーの方法を使用してbindsendToます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/ wayの使用は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 に答える