【问题标题】:Android developpement, Gottox socket.io-java-client: file not fount Exception /socket.io/1/Android开发,Gottox socket.io-java-client: file not found Exception /socket.io/1/
【发布时间】:2014-07-29 13:26:57
【问题描述】:

这是我的问题:

我一直在尝试将 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

谢谢:D

编辑:

正如 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);
      });
    });

【问题讨论】:

  • 感谢您提出这个问题,Larky 的回答对我有帮助,它对您有帮助,就像魅力一样...

标签: java android exception socket.io handshake


【解决方案1】:

我今天通过在服务器端恢复到早期版本的 socket.io(早期版本的 socket.io 节点模块)解决了这个问题。也许协议改变了?

为此:

  1. 删除 node_modules 文件夹中的 socket.io 文件夹。

  2. 在控制台类型上:

npm install socket.io@0.9.16

应该这样做...它对我有用:)

(显然这并不能完全解决问题,但早期版本的 socket.io 对我来说工作得很好)

【讨论】:

  • 谢谢,就是这样。似乎 socket.io-java-client 没有为最新版本的 socket.io 更新。我想知道它是否仍然在维护。我很惊讶它没有更新。
  • 这确实是您在将 socketio 0.9 客户端连接到 1.0 服务器时遇到的错误。握手发生了变化,因此您需要添加对 Java 客户端的支持,或者在服务器上降回 0.9。
  • GitHub 上有一个 pull request 增加了 1.0 的兼容性,如果你想试试的话。 github.com/Gottox/socket.io-java-client/pull/103
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多