【发布时间】:2017-02-26 21:55:57
【问题描述】:
我已经编写了一个类,它已经允许我使用套接字连接 2 个设备,我还实现了让彼此发送消息的能力。我收到带有 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());
}
}
【问题讨论】:
-
嗯?当前消息如何不是是最新消息?
-
为什么会重复。这是一个 tcp 连接,一旦你从流中读取,消息就消失了。如果您在谈论消息内容,那么您正在做的事情很好。您的方法还有一个问题是在每个循环中创建一个 DataInputStream 。这不是一个好主意,一旦你得到输入流,就是这样。您的无限循环应该在读取该流和缓冲区。我假设您有一种识别完整消息的方法。流的内容可以部分拆分和读取。
-
已修复,谢谢告知。
标签: java sockets datainputstream