Java:阅读循环是如何逃脱的?

时间:2012-08-07 12:49:30

标签: java sockets readline

通过一些关于套接字的教程,我不断遇到这样的代码:

  while(true){ 
    socket.receive(packet); 
    String message = new String(packet.getData(),0,packet.getLength(), TEXT_ENCODING); 
    System.out.println(message); 
  }  

问题是:这个循环是怎么回事?只有通过catch,一旦receive()完成了吗?

更确切地说,这就是我所做的:

while(true) {
        try {
            socket.receive(answer);
            resultString = new String(answer.getData(), 0, answer.getLength(), "ASCII");

            if (isMyIdentifier(resultString)) {
                gatewayIP =  answer.getAddress().getHostAddress();
                return true;
            } else {
                return false;
            }
        }
        catch (SocketTimeoutException e) {
            throw new GatewayNotReachableException();
        }
    }

但我一直想出一个时间感,尽管读数是正确的。所以我想知道,如果例外是'预期'的方式离开。虽然我严重怀疑......并且socket.receive(数据包)是,抛出异常的地方。

5 个答案:

答案 0 :(得分:4)

信不信由你,你不希望所有循环终止。

一个典型的例子是一个Web服务器,它有一个简单的循环来监听请求,处理请求,然后再回到等待 - “永远”。这基本上就是你的代码示例。

答案是“这个循环没有留下”,这就是你想要的。

答案 1 :(得分:0)

永远不会留下循环,这是服务器熬夜的全部目的。

或者您希望服务器接收一个客户端呼叫,然后关闭?

答案 2 :(得分:0)

除非在。内发生错误,否则循环永远不会被打破。

答案 3 :(得分:0)

这两个代码块意味着非常不同的功能感。

第一个似乎在说,“我希望我的请求处理程序无限期地运行,直到我自己手动退出程序!”这是合理的说法。

但第二块代码却截然不同。你进入循环,但永远不会绕过它多次因为isMyIdentifier(resultString)为真,在这种情况下你退出方法(当然是循环),或者不是你在哪种情况下< em>仍然退出该方法。在这种情况下,循环根本没有做任何事情。

此外,是的,异常处理为您的第二个代码块提供了另一种退出循环的方法。至于为什么它会抛出异常,这是另一个问题。

答案 4 :(得分:0)

在下面的代码中有一个连续 while loop,这似乎是一个合适的实现,但有些服务器倾向于继续倾听,并处理请求同时进行。

此while循环永远不会退出!

while(true){ 
    socket.receive(packet); 
    String message = new String(packet.getData(),0,packet.getLength(), TEXT_ENCODING); 
    System.out.println(message); 
  }