我必须编写实现TCP服务器的Java代码。 TCP客户端具有10%的传输故障由随机数确定。现在在接收器方面,它需要等待2000毫秒(2秒)&如果在2秒内没有收到发件人的数据。那么它将停止等待来自发送者和数据的数据。向发送方发送否定ACK。
BufferedReader inFromSender =new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
long startTime = System.currentTimeMillis();
while(( System.currentTimeMillis() - startTime) < 2000 )
{
clientSentence = inFromSender.readLine();
System.out.println("Received: " + clientSentence);
}
System.out.println("Data Transmission failed");
但是,一旦while循环开始&amp;接收器进入读取发送器,它永远不会断开..即使2秒。超时结束了。如何在2秒(超时)后中止/停止接收方等待发送方数据。
答案 0 :(得分:0)
一种方法是让Thread
在达到超时时关闭套接字。这会使read(...)
调用失败(可能是IOException
),因此您将从循环中退出。
示例:
final Socket connectionSocket = new Socket("...", 8888); // To be changed
BufferedReader inFromSender = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
Thread t = new Thread() {
public void run() {
try {
Thread.sleep(2000); // Wait 2 s
connectionSocket.close();
System.out.println("Data Transmission failed");
} catch(InterruptedException e) {
// Handle exception
}
}
};
t.start();
while((clientSentence = inFromSender.readLine()) != null) {
System.out.println("Received: " + clientSentence);
}