我正在尝试做的工作是在Java中模拟停止等待ARQ。初始设置是
创建一个ServerSocket
。
对于每个接受的客户端,使用ServerSocket.accept为该客户端创建一个新线程。
现在,主要部分是我基本上想做的事情。
发送数据包给客户端。 (或向客户端发送一些数据)
如果确认到来的时间到了等待时间,然后进入下一个循环,则等待1秒
List<String> frames = frame.getFrames(Server.getData());
for(int i=0;i<frames.size();++i)
{
String currFrame = frames.get(i);
writer.println(currFrame); // A printwriter for socket
writer.flush();
if(reader.readline()) // for 1 sec
/**
Here is what I want to do. I want to keep reading for input upto 1 sec.
if No input is found after even after 1 sec. Decrement i and go to the
start of the loop
**/
}
这里的问题是,作为阻塞代码的该读取器将一直保持到输入可用为止。但是我想要的是,如果一秒钟后读者没有找到输入,它就会跳出循环。而且我们必须注意到该代码在单独的线程中。
那么,有没有解决这个问题的灵巧解决方案?
而here是完整代码。
最佳答案
您需要setSoTimeut:
ServerSocket socket = new ServerSocket(somePort);
Socket incoming = socket.accept();
incoming.setSoTimeout(1000);