【发布时间】:2015-05-24 09:19:29
【问题描述】:
我要做的工作是在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 **/ }这里的问题是,这个阅读器是一个阻塞代码,直到输入可用。但我想要的是,如果 1 秒后读者没有找到输入,它会跳出循环。而且我们必须注意到这段代码是在一个单独的线程中。
那么,这个问题有什么巧妙的解决方案吗? here 是完整的代码。
【问题讨论】:
-
阅读
Socket.setSoTimeout()的文档。 -
你也可以通过 NIO 尝试非阻塞、基于事件的 IO。这样,计时器和读取将只是两种不同类型的事件。
标签: java multithreading sockets client-server