Java TCP:如何中止/停止接收方在超时后等待发送方数据

Java TCP:如何中止/停止接收方在超时后等待发送方数据,java,timeout,readline,break,Java,Timeout,Readline,Break,我必须编写java代码来实现TCP服务器和TCP客户端,其中10%的传输失败由随机数决定。现在,在接收器端,它需要等待2000毫秒(2秒)&如果在这2秒钟内没有从发送方接收到数据。然后它将停止等待来自发送方的数据,并向发送方发回否定的确认 BufferedReader inFromSender =new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); long startTime

我必须编写java代码来实现TCP服务器和TCP客户端,其中10%的传输失败由随机数决定。现在,在接收器端,它需要等待2000毫秒(2秒)&如果在这2秒钟内没有从发送方接收到数据。然后它将停止等待来自发送方的数据,并向发送方发回否定的确认

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");
BufferedReader INFOROMSENDER=新的BufferedReader(新的InputStreamReader(connectionSocket.getInputStream());
long startTime=System.currentTimeMillis();
而((System.currentTimeMillis()-startTime)<2000)
{
ClientSession=INFOROMSENDER.readLine();
System.out.println(“接收:”+客户语句);
}
System.out.println(“数据传输失败”);

但是一旦while循环开始&接收者开始读取发送者的信息,它就不会中断。。即使是2秒。超时结束了。如何在2秒(超时)后中止/停止接收器等待发送方数据。

一种方法是使用
线程,在达到超时时关闭套接字。这将使
读取(…)
调用失败(可能是
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);
}

这是家庭作业吗?请详细说明你观察到的情况。2秒后会发生什么?它在等待哪一行代码?尝试回答这些问题将对您有所帮助。由于TCP是一种可靠的传输方式,典型的故障率非常低,您无需为此编写代码,即它可以为您重新传输。IceMan&Peter抱歉没有回答您的问题。这仅仅是一个家庭作业,我被告知在接收端强制2秒超时。不过,艾默里克的想法帮了我的忙。感谢您的关注。:)