Разработка Android, Gottox socket.io-java-client: файл не найден Исключение /socket.io/1/

вот моя проблема:

я пытался использовать socket.io-java-client для Android приложение, но я получаю ошибку рукопожатия (см. ниже).

вот исходный код моего приложения:

public void runIO(){
    try {
        SocketIO socket = new SocketIO("http://192.168.1.60:1337");
        socket.connect(new IOCallback() {
            @Override
            public void onMessage(JSONObject json, IOAcknowledge ack) {
                try {
                    System.out.println("Server said:" + json.toString(2));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onMessage(String data, IOAcknowledge ack) {
                System.out.println("Server said: " + data);
            }

            @Override
            public void onError(SocketIOException socketIOException) {
                System.out.println("an Error occured");
                socketIOException.printStackTrace();
            }

            @Override
            public void onDisconnect() {
                System.out.println("Connection terminated.");
            }

            @Override
            public void onConnect() {
                System.out.println("Connection established");
            }

            @Override
            public void on(String event, IOAcknowledge ack, Object... args) {
                System.out.println("Server triggered event '" + event + "'");
            }
        });

        // This line is cached until the connection is establisched.
        socket.send("Hello Server!");
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

и мой Node.js/Socket.io:

    var app = require('http').createServer(handler)
    var io = require('socket.io')(app); 
    var fs = require('fs');

    app.listen(1337);

    function handler (req, res) {
      fs.readFile(__dirname + '/index.html',
      function (err, data) {
        if (err) {
          res.writeHead(500);
          return res.end('Error loading index.html');
        }

        res.writeHead(200);
        res.end(data);
      });
    }

    io.on('connection', function (socket) {
      socket.emit('news', { hello: 'world' });
      socket.on('my other event', function (data) {
        console.log(data);
      });
    });

И я получаю следующую ошибку:

    06-09 03:59:53.955: W/System.err(11738): io.socket.SocketIOException: Error while handshaking
    06-09 03:59:53.965: W/System.err(11738):    at io.socket.IOConnection.handshake(IOConnection.java:322)
    06-09 03:59:53.965: W/System.err(11738):    at io.socket.IOConnection.access$7(IOConnection.java:292)
    06-09 03:59:53.970: W/System.err(11738):    at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199)
    06-09 03:59:53.970: W/System.err(11738): Caused by: java.io.FileNotFoundException: http://192.168.1.60:1337/socket.io/1/
    06-09 03:59:53.975: W/System.err(11738):    at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
    06-09 03:59:53.975: W/System.err(11738):    at io.socket.IOConnection.handshake(IOConnection.java:313)

В браузере это работает, и страница http://192.168.1.60:1337/socket.io/1/ возвращает следующее сообщение (через браузер):

{"code":0,"message":"Transport unknown"}

я не знаю, что сделать, чтобы заставить его работать ... пожалуйста, помогите :x

Спасибо

РЕДАКТИРОВАТЬ:

Как сказал Larky, мне пришлось понизить версию Socket.io до 0.9.16. Это работало как шарм со следующим кодом узла:

    var io = require('socket.io').listen(80); 

    io.on('connection', function (socket) {
      socket.emit('news', { hello: 'world' });
      socket.on('my other event', function (data) {
        console.log(data);
      });
    });

person Enyx    schedule 09.06.2014    source источник
comment
спасибо, что задали этот вопрос, ответ от Ларки помогает мне именно он помогает вам, как очарование...   -  person Devang    schedule 07.07.2015


Ответы (1)


Сегодня я решил проблему, вернувшись к более ранней версии socket.io на стороне сервера (более ранняя версия модуля socket.io Node). Может протокол изменился?

Сделать это:

  1. Удалите папку socket.io в папке node_modules.

  2. В консоли введите:

npm установить [email protected]

Это должно сделать это ... это сработало для меня :)

(очевидно, это не решает проблему полностью, но более ранняя версия socket.io отлично работала для моих целей)

person Larky    schedule 09.06.2014
comment
Спасибо, это было. Похоже, что socket.io-java-client не обновлен для последней версии socket.io. Интересно, сохраняется ли он до сих пор или нет? Я удивлен, что он не был обновлен. - person Enyx; 10.06.2014
comment
Это действительно ошибка, которую вы получаете при подключении клиента socketio 0.9 к серверу 1.0. Рукопожатие изменилось, поэтому вам нужно либо добавить поддержку в свой Java-клиент, либо вернуться к версии 0.9 на сервере. - person steve cook; 19.08.2014
comment
На GitHub есть запрос на вытягивание, который добавляет совместимость с 1.0, если вы хотите попробовать. github.com/Gottox/socket.io-java-client/pull/ 103 - person Trellmor; 09.09.2014