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

时间:2014-03-20 21:32:29

标签: sockets google-chrome-extension google-chrome-app

我尝试使用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 个答案:

答案 0 :(得分: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.");
  });
}