Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字发射失败_Java_Android_Sockets_Client Server - Fatal编程技术网

Java 套接字发射失败

Java 套接字发射失败,java,android,sockets,client-server,Java,Android,Sockets,Client Server,我正在尝试向我的android客户端发送消息“idA已连接”。问题是,发送到特定客户端的消息只工作一次。一旦服务器停止发送行“'idA'已连接”,就会调用它。我必须重置我的服务器才能让它再次工作,但问题仍然存在。基本的io emit函数始终有效,这让我认为这是特定客户端emit的问题。 我尝试将选项“forceNew”添加到我的套接字连接中,但它没有改变任何东西(我使用的是nkzawa套接字客户端) 我的客户代码: socket.on('sign_in', function(idA, idB

我正在尝试向我的android客户端发送消息“idA已连接”。问题是,发送到特定客户端的消息只工作一次。一旦服务器停止发送行“'idA'已连接”,就会调用它。我必须重置我的服务器才能让它再次工作,但问题仍然存在。基本的io emit函数始终有效,这让我认为这是特定客户端emit的问题。 我尝试将选项“forceNew”添加到我的套接字连接中,但它没有改变任何东西(我使用的是nkzawa套接字客户端)

我的客户代码:

  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");
然后使用新线程:

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

同样,“idA已连接”消息只会在第一次打印出来。但是每次都会一致地调用消息“user has signed in”(用户已登录)。

结果表明,我的emit写得不正确

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

io.to(clients[idA]).emit('sign_in', idA + ' has connected');
还要确保指定

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