Chrome应用套接字.tcpServer无法接收数据

cha*_*lan 6 sockets google-chrome-extension google-chrome-app

我尝试使用Chrome的sockets.tcpServerAPI与本地应用程序进行通信.这是我的代码的链接:http://pastebin.com/1mWXeZKr.

nc 127.0.0.1 7000用来测试服务器是否正常工作.但是,虽然我可以连接到服务器并从服务器接收消息,但是当我从客户端(nc)发送消息时,服务器不会收到任何消息.我不确定我是否正确使用API​​.有人能注意到代码中的任何错误吗?

以下是代码片段:

function onAccept(info) {
  if (info.socketId != serverSocketId)
    return;
  console.log("Client connected.");
  // Start receiving data.
  _stringToArrayBuffer("connected.\n", function(buf) {
    chrome.sockets.tcp.send(info.clientSocketId, buf, function(info) {
      if (info.resultCode != 0)
        console.log("Send failed.");
    });
  });

  chrome.sockets.tcp.onReceive.addListener(onReceive);
}

function onReceive(info) {
  console.log("Data received.");
  _arrayBufferToString(info.data, function(str) {
    console.log(str);
  });
}
Run Code Online (Sandbox Code Playgroud)

更新:

好的,我找到了解决方案.请参阅以下答案.

cha*_*lan 15

我找到了解决方案.clientSocketId默认情况下,套接字在创建时暂停.在onAccept函数中,只需chrome.sockets.tcp.setPaused(info.clientSocketId, false);在添加onReceive侦听器后添加解决问题.

function onAccept(info) {
  if (info.socketId != serverSocketId)
    return;

  chrome.sockets.tcp.onReceive.addListener(onReceive);
  chrome.sockets.tcp.onReceiveError.addListener(function(info) {
    console.log("Error: ", info);
  });

  chrome.sockets.tcp.setPaused(info.clientSocketId, false);

  buf = str2ab("Connected.\n");
  chrome.sockets.tcp.send(info.clientSocketId, buf, function(info) {
    if (info.resultCode != 0)
      console.log("Send failed.");
  });
}
Run Code Online (Sandbox Code Playgroud)