套接字发出失败

时间:2015-02-18 02:37:56

标签: java android sockets client-server

  socket.on('sign_in', function(idA, idB) {
var idA = idA; //global vars
var idB = idB; //ignore this var
if (!clients[idA]) {
  clients[idA] = socket.id;
}
console.log(idA + ' has connected');
io.to(clients[idA]).emit('sign_in', idA + ' has connected'); });

io.emit('sign_in', "user is signed in");

我正在尝试发出消息,"' idA'已连接"到我的Android客户端。问题是,向特定客户端发送只能工作一次。一旦服务器停止发送线路,它就会被呼叫。' idA'已连接"。我必须重置我的服务器,以使其再次工作,但问题仍然存在。基本的io发射功能始终有效,这使我认为它是特定客户端发出的问题。 我试过添加选项' forceNew'到我的套接字连接,但它没有改变任何东西(我使用nkzawa套接字客户端)。

我的客户代码:

IO.Options options = new IO.Options();
        options.forceNew = true;
        socket = IO.socket(HOST, options);

然后使用新线程:

new Thread(new Runnable() {
        @Override
        public void run() {
            Log.i(TAG, "attempting to connect socket");
            socket.connect();
            idA = "user1"
            idB = "nicknameOfUser1"
            socket.emit("sign_in", idA, idB);
        }
    }).start();

收到emit:

socket.on("sign_in", new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                    String message = (String) args[0];
                    System.out.println(message);
            }
        });

同样,消息"' idA'已连接"只会在第一次打印出来。但消息"用户已登录"每次都被称为。

1 个答案:

答案 0 :(得分:0)

原来我的发光写得不正确。

io.to(clients[idA]).emit('sign_in', idA + ' has connected');

应该是

clients[idA].emit('sign_in', idA + ' has connected');

也一定要分配

clients[idA] = socket;