Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome UDP套接字服务器发送到本地主机以外的其他主机返回-109错误代码_Javascript_Sockets_Google Chrome Extension_Google Chrome App - Fatal编程技术网

Javascript Chrome UDP套接字服务器发送到本地主机以外的其他主机返回-109错误代码

Javascript Chrome UDP套接字服务器发送到本地主机以外的其他主机返回-109错误代码,javascript,sockets,google-chrome-extension,google-chrome-app,Javascript,Sockets,Google Chrome Extension,Google Chrome App,我正在使用chrome网络API打开一个UDP套接字,该套接字应该同时侦听和发送数据(服务器和客户端)。这就是为什么我使用服务器方式绑定bind/sendTo/recvFrom 但是,我无法将数据发送到本地主机以外的其他主机:请参见下面的示例。代码错误-109到地址\u不可访问 chrome.socket.create('udp', function(socketInfo) { var socketId = socketInfo.socketId; chrome.socket.bin

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

但是,我无法将数据发送到本地主机以外的其他主机:请参见下面的示例。代码错误
-109
地址\u不可访问

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发送到
udp绑定

使用
连接
/
写入
的方法是可行的,但这不是我想要实现的,因为我试图同时打开一个套接字,而不是服务器和客户端


有什么想法吗?

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

我可以通过将套接字绑定到
0.0.0
而不是
127.0.0.1
上来运行它

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

这也许就是@EJP在本文中的意思。我通过浏览找到了解决方案

如果
bytesWrite
为负数,则为错误代码。你调查过
-109
是什么意思吗?哦,是的,我在问题中加了一行。ThxAre正在尝试连接到“google.com”上的3007端口?似乎没有这样的端口开放。没有人尝试连接到google.com:3007。因为它是UDP,所以不存在“连接”,您也不关心端口是否打开。仅供参考,127.0.0.1:3007上没有任何内容,而且仍然!为什么它只能发送到本地主机?说明在哪里?“使用默认值是什么意思?@alexstrat,因为这就是绑定到localhost的意思。”。这就是localhost的含义。它是一个仅在本地主机内工作的IP地址。它在外面看不见。不可能。这正是我的意思,也是我说的。默认值为0.0.0.0。