I didn't manage to access fron internet to a chrome app tcp server. firewall and home network well configured, I tried and managed with a native c++ tcp server through the same port.
My manifest is like that:
"sockets": {
"tcpServer": {
"listen": "*"
}
}
and my tcpServer is launched like that:
// ...
chrome.sockets.tcpServer.create({name:"chrome-local-tcp-server", persistent:false}, function(createInfo) {
_this.info = createInfo;
// Listening TCP server
chrome.sockets.tcpServer.listen(createInfo.socketId, "127.0.0.1", 8000, null, function(result) {
// ...
});
}):
Only localhost client connection work
function WebSocketServer(port)
{
this.port = port;
this.ips = [];
this.ip_serverInfo = {};
this.webSockets = [];
this.socketId_webSocket = {};
var _this = this;
chrome.system.network.getNetworkInterfaces(function(interfaces) {
interfaces.forEach(openSocket);
});
function openSocket(interface) {
chrome.sockets.tcpServer.create({name:"chrome-local-tcp-server", persistent:false}, function(createInfo) {
_this.ips.push(interface.address);
_this.ip_serverInfo[interface.address] = createInfo;
chrome.sockets.tcpServer.listen(createInfo.socketId, interface.address, port, null, function(resultCode) {
if (resultCode < 0)
{
console.log("Error listening: "+chrome.runtime.lastError.message);
}
else
{
console.log("tcpServer listenning on "+interface.address+":"+port, createInfo);
}
});
});
}
// New connection
chrome.sockets.tcpServer.onAccept.addListener(function(info) {
debug && console.log("tcpSocket accepted", info);
var ws = new WebSocket(info);
_this.webSockets.push(ws);
_this.socketId_webSocket[info.clientSocketId] = ws;
ws.closeTcpSocket = function(clientInfo) {
// close TCP connection
chrome.sockets.tcp.disconnect(clientInfo.clientSocketId, function() {
chrome.sockets.tcp.close(clientInfo.clientSocketId, function() {
console.log("tcpSocket closed", clientInfo);
delete _this.socketId_webSocket[clientInfo.clientSocketId];
arrayRemoveValue(_this.webSockets, ws);
});
});
};
});
// Connection error
chrome.sockets.tcpServer.onAcceptError.addListener(function(info) {
console.error("tcpServer onAcceptError", info);
});
// on received data
chrome.sockets.tcp.onReceive.addListener(function(info) {
//console.log("onReceive", info);
var ws = _this.socketId_webSocket[info.socketId];
if (ws)
{
ws.tcpDataReceived(info.data);
}
});
// on received error
chrome.sockets.tcp.onReceiveError.addListener(function(info) {
if (info.resultCode !== -15)
{
console.error("tcp socket onReceiveError", info);
}
});
}
Solution found. I had to open the port in my windows firewall. That's not done automatically for this Chrome feature !