Search code examples
google-chrome-apptcpserverlisten

Can't connect to Chrome app tcp server through from outside my local network


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

  • Solution found. I had to open the port in my windows firewall. That's not done automatically for this Chrome feature !