Chrome应用程序的sockets.tcpServer未接收到数据。

5
我试用Chrome的sockets.tcpServer API与本地应用程序进行通信。这是我的代码链接: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);
  });
}

更新:

好的,我找到了解决方案。请见下面的答案。

1个回答

14

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

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.");
  });
}

1
我指的是 'https://developer.chrome.com/apps/app_network',其中在 setPaused() 调用中缺少 clientSocketId 参数... 感谢您提供的解决方案! - Djames

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接