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

実行する1つの方法は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 に答える