Thanu
Thanu

Reputation: 2501

Web Sockets doesn't work on Chrome and Safari in iOS 6.1

I wrote a very basic web program that connects to a Node JS web server which print text on to a console thats from the browser.

All good on the computer but when I try to connect to the web socket server from my iPhone, it doesn't connect to it (It connects to the http server but not to the ws)

SERVER (Node JS)

app.get ('/', function(req, res){ 
    fs.readFile('ws.html', 'utf8', function(err, text){
            res.send(text);
    });
});
server.listen(1337, function (){
    console.log((new Date()) + " Server is listening on port 1337... ");
});

//creating the websocket server

websock = new WebSocketServer({
    httpServer: server
});

//WebSocket Server
websock.on('request', function(request) {
     console.log((new Date()) + ' Connection from origin ' + request.origin + '.');

     var connection = request.accept(null, request.origin);
     var index = clients.push(connection) - 1;
     console.log((new Date()) + ' Connection accepted.');

    //Incoming message handling
    connection.on('message', function(message) {
            console.log('Client Says: ' +  message.utf8Data);
    });

    connection.on('close', function (connection){
            //close connection
    });
});

Client Script $(function () {

var content = $('#content');
var input = $('#input');
var status = $('#status');

window.WebSocket = window.WebSocket || window.MozWebSocket;

 if (!window.WebSocket) {
    content.html($('<p>', { text: 'Browser doesn\'t '
                                    + 'support   WebSockets.'} ));
    input.hide();
    $('span').hide();
    return;
}

var connection = new WebSocket('ws://127.0.0.1:1337');

connection.onopen = function () {
    input.removeAttr('disabled');
    status.text('Send a Message:');
};

connection.onerror = function (error) {
     content.html($('<p>', { text: 'Connection Error' } ));
};

connection.onmessage = function (message) {
    // try to decode json 
    try {
        var json = JSON.parse(message.data);
    } catch (e) {
        console.log('Invalid Message Text: ', message.data);
        return;
    }
    // handle incoming message
    connection.send($('#input').val());
};

 input.keydown(function(e) {
    if (e.keyCode === 13) {
        var msg = $(this).val();
        if (!msg) {
            return;
        }
        connection.send(msg);
        $(this).val('');

        if (myName === false) {
            myName = msg;
        }
    }
  });
});

I know those 2 browsers are supporting web sockets, cannot see what I'm doing wrong. Can anyone see what wrong with it.

Upvotes: 0

Views: 3503

Answers (1)

veritasetratio
veritasetratio

Reputation: 611

You are opening the socket on the client using the loopback address 127.0.0.1 instead of the address of your server.

var connection = new WebSocket('ws://127.0.0.1:1337');

Upvotes: 1

Related Questions