If no incoming messages have been received in a while, the remote
application or host may be dead or the connection may have been lost,
so send out an Are-You-There.
This "Keep-Alive" does not actually do anything for cleaning up the local socket;
rather, it helps the remote Are-You-There protocol by waiting for incoming
Are-You-Theres and responding to them.
This method is called by Receiver as the call-back method
from MessageListener
Ignore all messages but "Are You There." Respond to Are-You-There
with "I Hear You."
There is an alternate implementation, not as simple but more
conservative of bandwidth, which resembles somewhat
the AreYouThere/IHearYou pair.
This method is called by Receiver as the call-back method
from MessageListener
Ignore all messages but "Are You There." Respond to Are-You-There
with "I Hear You."
"I Hear you" is expressed here by a dummy message,
since its only purpose is to update the last-message-received
timestamp for the other side.
Resembles the ActiveKeepAlive in that it sends out dummy messages to see if it gets an IOException, but does not
send out dummy messages periodically; rather, only if no incoming data is forthcoming for a long time
do we test the connection.