Java套接字:如何仅在DataInputStream中显示消息一次

时间:2017-02-26 21:55:57

标签: java sockets datainputstream

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

那么还有另一种方法可以检查消息是发送两次,还是消息与几秒前发送的消息相同?

我的代码检查收到的消息:

   SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=Agenda;Persist Security Info=True;User ID=sa;Password=xxxxxxxx");
            conn.Open();

            SqlCommand command = new SqlCommand(/*sql query*/, conn);
            command.Parameters.AddWithValue("@sqlordernr", odernr);

            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (reader.Read())
                {
                   // if order is opened then Messagebox.Show

                   // if is not opened 
                   // String OrderCustommerName = reader.GetString(3).TrimEnd();
                   // String OrderCustommerCity= reader.GetString(4).TrimEnd();
                   // lbOrderData.Text = OrderCustommerName + " " + OrderCustommerCity;
                }
            }
            conn.Close();

2 个答案:

答案 0 :(得分:0)

尝试使用集合对象存储最近20条消息。 ArrayList会很好。检查最后20条消息并删除每条新消息中的第一条消息,并将新消息添加到集合中。

祝你好运。

答案 1 :(得分:0)

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

  • 尝试在while循环之外移动DataInputStream声明。每次检查邮件时都会声明它可能是你的问题。
  • 确保发送邮件的代码只发送一次。如果它有可能在循环中发送它会阻塞你的输入流。

希望这有帮助!