日期:2014-05-20  浏览次数:20760 次

如何能在SOCKET发送下一步命令前先清除读取缓冲

 循环发送多组发送命令后,发现有时候接收到的不是的刚刚发送出的命令的回复,是上一次或者更早的命令。
 后查明是读取缓冲在作祟,JAVA可否清空读取缓冲?

  我找了很多地方都没有明确的答复也有很多人问。 是我问题的关键词有问题吗? 还是JAVA就不支持缓冲区的控制?

我现在选择了另一个思路利用快速超时来清空缓冲 
try {
socket.setSoTimeout(1);
sock.recv();
}catch(SocketTimeoutException e){}


虽然问题是能解决,但还是希望能求证整个问题。JAVA缓冲区的控制真的没法这么做么?

------解决方案--------------------
尝试用 skip() 吧,直接skip(available()) 或者一个超大数。

但其实极有可能你刚清理后,老的数据包才恰好达到,所以不能肯定被保证。

你用timeOut的模式其实也比较危险,万一调度时间超出1ms,你就再也拿不到回复了。