1

我正在尝试在 NodeJS 服务器和 Android 之间交换消息。Android 可以连接和发送消息到服务器,但服务器发送的消息在 Android 上收不到。

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

app.listen(80);

var text = 'BRUNO';
var text2 = 'BRUNO2';

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

var clients = [];

io.sockets.on('connection', function (socket) {
  socket.emit('news', text);
  socket.emit('news', text2);
  socket.send('BRUNO');
  socket.on('my other event', function (data) {
    console.log(data);
    console.log(Math.floor((Math.random()*10000)+1));
  });

  socket.on('name', function (data) {
    socket.set('name',data);
    console.log('BRUNOOOO');
    if (clients.length ==0 ) 
        clients.push(socket);
    else {
    socket2 = clients.pop()
    socket2.join('room');
    socket.join('room');
    io.sockets.in('room').emit('news','NOVA SALA');
    }
    socket.get('name', function (err, data) {
      socket.emit('news',data);
  });
  });
});

安卓

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView txtTest;
        txtTest = (TextView) findViewById(R.id.txtTeste);
        try {
            ToServer tos = new ToServer(txtTest);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

public class ToServer implements IOCallback {
    private SocketIO socket;
    private TextView txtTest;

    public ToServer(TextView a) throws Exception {
        socket = new SocketIO();
        this.txtTest = a;
        socket.connect("http://nodebruno.jit.su", this);
        socket.emit("my other event", "SERVER RECEBEU ANDROID");
    }

    @Override
    public void onMessage(JSONObject json, IOAcknowledge ack) {
        try {
            txtTest.setText(json.toString(2));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onMessage(String data, IOAcknowledge ack) {
        txtTest.setText(data);
                    Log.d("Event",event );
    }

    @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) {
        txtTest.setText(event);
        Log.d("Event",event );
    }
}

在 Android 上我使用这个https://github.com/Gottox/socket.io-java-client

4

2 回答 2

1

我试过你的代码,它在我的情况下工作。在覆盖功能下,我能够获取从服务器发送的事件和消息。

于 2013-04-22T11:48:54.947 回答
0

尝试使用这个:https ://github.com/koush/AndroidAsync 这里是实现演示:https ://github.com/Thanhktm/socketio_android

于 2014-01-22T09:22:36.880 回答