-1

I have a node server running. i want to connect to server with socket. i'm using socket io java client (https://github.com/Gottox/socket.io-java-client/wiki) here is my server code :

var app = require('express')()
 , http = require('http')
 , server = http.createServer(app)
 , io = require('socket.io').listen(server);
io.sockets.on('connection', function(client)
{
console.log("client connected!");
client.emit('messages',{text: 'Hello world!'});
client.on('messages', function(data)
{
    console.log(data);
});
client.on('echo', function(data)
{
    console.log(data);
});
});
server.listen(8080);

and here is my android code :

try {
        SocketIO socket = new SocketIO("http://10.0.2.2:9000/");
        socket.connect(new IOCallback() {

            @Override
            public void onMessage(JSONObject arg0, IOAcknowledge arg1) {
                try {
                    Toast.makeText(MainActivity.this,
                            arg0.getString("text"), Toast.LENGTH_LONG)
                            .show();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

            @Override
            public void onMessage(String arg0, IOAcknowledge arg1) {
                Toast.makeText(MainActivity.this, arg0, Toast.LENGTH_LONG)
                        .show();

            }

            @Override
            public void onError(SocketIOException arg0) {
                Log.d("tag", arg0.toString());

            }

            @Override
            public void onDisconnect() {
                // TODO Auto-generated method stub

            }

            @Override
            public void onConnect() {
                Toast.makeText(MainActivity.this, "Connected",
                        Toast.LENGTH_LONG).show();

            }

            @Override
            public void on(String event, IOAcknowledge ack, Object... args) {
                if ("echo back".equals(event) && args.length > 0) {
                    Log.d("SocketIO", "" + args[0]);
                    // -> "hello"
                }
            }
        });
        socket.emit("echo", "hello");
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

my socket does not connect! i mean no toast shown in android. and here is my server log :

 debug - client authorized
   info  - handshake authorized -M9Dcv2a1Gd-LJpkogRF
   debug - setting request GET /socket.io/1/websocket/-M9Dcv2a1Gd-LJpkogRF
   debug - set heartbeat interval for client -M9Dcv2a1Gd-LJpkogRF
   debug - client authorized for 
   debug - websocket writing 1::
client connected!
   debug - websocket writing 5:::{"name":"messages","args":[{"text":"Hello world!"}]}
hello
   info  - transport end (undefined)
   debug - set close timeout for client -M9Dcv2a1Gd-LJpkogRF
   debug - cleared close timeout for client -M9Dcv2a1Gd-LJpkogRF
   debug - cleared heartbeat interval for client -M9Dcv2a1Gd-LJpkogRF
   debug - discarding transport

where is my fault?

verybadalloc
  • 5,768
  • 2
  • 33
  • 49
Mohammad Rahchamani
  • 5,002
  • 1
  • 26
  • 36
  • Are you using the Android emulator, or a device? `10.0.2.2` only works on emulator: http://stackoverflow.com/questions/8240338/http-10-0-2-2-works-on-the-android-emulator-but-not-on-android-device-used-as – verybadalloc Jan 05 '14 at 15:07

1 Answers1

0

Probably because you have placed the Toast.makeText() at the wrong place. The onMessage() event on client fires when the server do socket.send(), which is mostly used to send a plain text messages between the client/server.

When the server does socket.emit(), the client listens them into on(String event, IOAcknowledge ack, Object.. args) method. So replace your Toast.makeText() into on() method.

    @Override
    public void on(String event, IOAcknowledge ack, Object... args) {
        Object[] arguments = args;
        String json = arguments[0].toString();

        if(event.equalsIgnoreCase("messages")){
              // do something with json.
        }
    }
sohel khalifa
  • 5,602
  • 3
  • 34
  • 46