循环发送多组发送命令后,发现有时候接收到的不是的刚刚发送出的命令的回复,是上一次或者更早的命令。
 后查明是读取缓冲在作祟,JAVA可否清空读取缓冲?  我找了很多地方都没有明确的答复也有很多人问。 是我问题的关键词有问题吗? 还是JAVA就不支持缓冲区的控制?我现在选择了另一个思路利用快速超时来清空缓冲 
try {
socket.setSoTimeout(1);
sock.recv();
}catch(SocketTimeoutException e){}
虽然问题是能解决,但还是希望能求证整个问题。JAVA缓冲区的控制真的没法这么做么?

解决方案 »

  1.   

    尝试用 skip() 吧,直接skip(available()) 或者一个超大数。但其实极有可能你刚清理后,老的数据包才恰好达到,所以不能肯定被保证。你用timeOut的模式其实也比较危险,万一调度时间超出1ms,你就再也拿不到回复了。
      

  2.   

    嗯。 我想我还是应该考虑这点 ,您的应答记录时间戳是个非常好的思路。这里还有个旧问题,http://topic.csdn.net/u/20120403/19/40364b5f-3f13-49f9-ac67-860bcea63797.html其中的问题3,虽然变相解决但也未达到我本意的效果。 麻烦您也给看看。