有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Javasocket:如何在DataInputStream中只显示一次消息

我已经编写了一个类,它已经允许我使用socket连接两个设备,我还实现了让彼此发送消息的功能。我使用DataInputStream获取接收到的消息,DataInputStream在while(true){}循环中不断检查消息。我记录这些消息,但它们会向整个控制台发送垃圾邮件。因此,我添加了一个名为lastMsg的变量,该变量检查当前消息是否是最后收到的消息,如果是这样,它将不会打印消息,因此消息将只记录一次。问题是,当用户发送两条相同的消息时,显然只会记录第一条消息

那么,有没有其他方法来检查一条消息是否发送了两次,或者该消息与几秒钟前发送的消息相同

我的代码用于检查收到的邮件:

 public void run() {
            Socket other = new Socket();
            try {
            other.connect(new InetSocketAddress("xxxxxx", xxxx), 1000);
            log("Connected to host");
            while (true) {

                DataInputStream in = new DataInputStream(other.getInputStream());
                String msg = in.readUTF();
                if(!lastClientMsg.equals(msg)){
                    log("[HOST-MSG] "+msg);
                    lastClientMsg = msg;
                }


            }
                } catch (IOException e) {
                log("Error at creating client: "+e.toString());
            }

        }

共 (2) 个答案

  1. # 1 楼答案

    尝试使用集合对象存储最近20封邮件。ArrayList可以。检查最后20封邮件,删除每封新邮件中的第一封邮件,并将新邮件添加到集合中

    祝你好运

  2. # 2 楼答案

    使用DataInputStream.readUTF()方法应该将消息从输入缓冲区移动到字符串变量,但是由于某种原因缓冲区没有被清除。以下是一些提示:

    • 尝试将DataInputStream声明移到while循环之外。每次检查邮件时声明它可能是您的问题
    • 确保发送消息的代码只发送一次。如果它以循环的形式发送,它将阻塞您的输入流

    希望这有帮助