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());
}
}
# 1 楼答案
尝试使用集合对象存储最近20封邮件。ArrayList可以。检查最后20封邮件,删除每封新邮件中的第一封邮件,并将新邮件添加到集合中
祝你好运
# 2 楼答案
使用
DataInputStream.readUTF()
方法应该将消息从输入缓冲区移动到字符串变量,但是由于某种原因缓冲区没有被清除。以下是一些提示:DataInputStream
声明移到while循环之外。每次检查邮件时声明它可能是您的问题李>希望这有帮助