Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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
io java客户端多次收到相同的消息_Java_Android_Socket.io_Client - Fatal编程技术网

io java客户端多次收到相同的消息

io java客户端多次收到相同的消息,java,android,socket.io,client,Java,Android,Socket.io,Client,我正在android聊天应用程序上使用socket.io。为了使连接保持活动状态,我正在连接主活动中启动的服务中的套接字。我检查插座是否连接。如果不是,我将进行套接字连接。这是我的密码: try { mSocket = IO.socket("http://192.168.x.x:XXXX"); } catch (URISyntaxException e) { throw new RuntimeException(e); } if(!mSo

我正在android聊天应用程序上使用socket.io。为了使连接保持活动状态,我正在连接主活动中启动的服务中的套接字。我检查插座是否连接。如果不是,我将进行套接字连接。这是我的密码:

try {
        mSocket = IO.socket("http://192.168.x.x:XXXX");
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }

    if(!mSocket.connected()){   
        mSocket.connect();
    }

    mSocket.on("new message", onNewMessage);
    mSocket.on("user joined", onUserJoined);
    mSocket.emit("add user", "MobileUser");

    message += cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE);
    sendMessage();

public void sendMessage(){
     mSocket.emit("new message", message);
     addMessage("MobileUser", message);
}
连接工作正常。我的服务每分钟都使用套接字发送消息。在另一个客户机中似乎是这样的:

MobileUser: 1:11
MobileUser: 1:12
MobileUser: 1:13
MobileUser: 1:14
MobileUser: 1:15
这是我的问题:在这5条消息之后(5次只是一个例子,它可以是超过1的任何数字),如果其他客户端发送消息,我会收到5次该消息。但我当然想得到这一次的信息。我如何处理这个问题?有什么建议吗

编辑:

我的onNewMessage方法位于客户端:

private Emitter.Listener onNewMessage = new Emitter.Listener() {
public void call(final Object... args) {
    Thread t = new Thread(new Runnable() {
        public void run() {
            JSONObject data = (JSONObject) args[0];
            try {
                username = data.getString("username");
                message = data.getString("message");
            } catch (JSONException e) {
                return;
            }

            Log.v(username, message);
        }
    });

    t.start();
  }
};
以及我的服务器上的“新建邮件”事件:

socket.on('new message', function (data) {
   console.log('message: ' + data);

   socket.broadcast.emit('new message', {
      username: socket.username,
      message: data
   });
});

我想我找到了解决办法。我应该检查我的服务类中是否连接了插座,但这些代码不应该在其中:

mSocket.on("new message", onNewMessage);
mSocket.on("user joined", onUserJoined);
mSocket.emit("add user", "MobileUser");

我将这些从我的服务类中删除,并将MainActivity类放入其中。问题已解决。

您在使用onNewMessage方法时做了什么?似乎您正在服务器中侦听并发出“新消息”事件,这可能是问题所在。是的,您是对的。我将使用添加onNewMessage方法编辑我的问题@Risuch到目前为止,还没有什么看起来有问题,但还不完全清楚客户端-服务器应用程序的所有部分,所以很难详细说明。您可能需要上传一些plunker,以便可以看到完整的信息。您的服务器似乎是node.js和Client Java,对吗?所有客户端都使用相同的代码并连接到相同的服务器?是的,我的服务器是node.js。实际上,当我使用这个项目()作为客户机时,我没有遇到这个问题。但是我想在服务中使用socket.io以保持连接的活动性,正如我前面提到的@里苏克