我尝试使用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);
});
}
更新:
好的,我找到了解决方案。请参阅下面的答案。
答案 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.");
});
}