首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.IO-java-客户端和node.js -握手时出错

Socket.IO-java-客户端和node.js -握手时出错
EN

Stack Overflow用户
提问于 2013-04-28 22:47:12
回答 1查看 7.1K关注 0票数 2

我正在尝试开发一个将连接到node.js服务器的安卓应用程序。下面是错误消息:

代码语言:javascript
复制
04-28 14:24:52.250: W/System.err(811): io.socket.SocketIOException: Error while handshaking
04-28 14:24:52.250: W/System.err(811):  at io.socket.IOConnection.handshake(IOConnection.java:322)
04-28 14:24:52.259: W/System.err(811):  at io.socket.IOConnection.access$600(IOConnection.java:39)
04-28 14:24:52.259: W/System.err(811):  at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199)
04-28 14:24:52.259: W/System.err(811): Caused by: java.lang.ArrayIndexOutOfBoundsException
04-28 14:24:52.306: W/System.err(811):  at io.socket.IOConnection.handshake(IOConnection.java:318)
04-28 14:24:52.306: W/System.err(811):  ... 2 more

服务器:

代码语言:javascript
复制
 var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World\n');
    }).listen(8881, '192.168.1.107');
    console.log('Server running at http://192.168.1.107:8881/');

客户端:

代码语言:javascript
复制
public class RestClientActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            SocketIO socket = new SocketIO("http://192.168.1.107:8881/");
            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();
        }
    }

你知道我做错了什么吗?如果我在浏览器中输入http://192.168.1.107:8881/,它会在页面上显示"Hello World“,但我无法使用socket.io-java-client库进行连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-29 01:11:30

首先,如果您尝试使用socket.io 为您的服务创建rest客户端,则不必使用,只需使用服务器就可以了,在客户端使用HTTPClient就可以了。

假设你使用这个android socket.io客户端Java Socket.io client,我也用过它。

将此脚本作为服务器端套接字io脚本进行尝试,这是LearnBoost/socket.io的基本示例

代码语言:javascript
复制
var server = require('http').Server();
var io = require('socket.io')(server);
io.on('connection', function(socket){
  socket.on('message', function(data){
    console.log("Received message : "+data);
    socket.emit("message","echoing back : "+data);
  });
  socket.on('disconnect', function(){
    // client disconnected
   });
});
server.listen(8881,"192.168.1.107");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16264051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档