我正在尝试做的工作是在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);

10-07 19:20
查看更多