1

我必须编写实现 TCP 服务器和 TCP 客户端的 java 代码,其中 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循环开始并且接收者进入从发送者那里读取,它就永远不会中断..即使2秒。超时结束。如何在 2 秒(超时)后中止/停止接收方等待发送方数据。

4

1 回答 1

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);
}
于 2012-09-17T19:36:07.417 回答