0

サーバーサイドアプリケーションを書いてみました。学校から、私はコードに無限ループをさせてはならないことに傾倒しました。しかし、サーバー側のアプリケーションでは、どのような条件で無限ループを終了する必要があるのか​​わかりません。コード

ServerSocket s = null;
s = new ServerSocket(5000 , 10);

Socket connection = null;
while(true)
{
    connection = s.accept();

    //create new thread to handle client
    new client_handler(connection).start();
}
4

7 に答える 7

5

通常、サーバーでJVMがシャットダウンされると、ループが終了します。または、例外がスローされてキャッチされなかった場合。これは、無限ループが正当化される1つのケースです。すべてがうまくいけば、サーバーは永久に稼働します。

于 2013-03-25T09:48:06.063 に答える
4

ループの内側または外側のある時点でboolean設定できるフラグを使用します。false

boolean started = true;
while (started) {
  ...
}
于 2013-03-25T09:47:00.380 に答える
4

サーバーが実行され、接続を無期限に受け入れる必要がある場合は、ループを終了する必要はありません。

コマンドや条件がある場合、サーバーを終了する必要があるときは、そうするだけです。

while(true) {
    connection = s.accept();

    //create new thread to handle client
    new client_handler(connection).start();

    if (condition)
       break;
}

またはさらに良い

while (!condition) {
...
}
于 2013-03-25T09:48:27.923 に答える
3

通常、これらのアプリケーションでは、次のようにフラグを使用して終了を通知します。

private volatile boolean shouldDie = false; //thevolatile bit is important
...
while (!shouldDie) {
   //do some work
}

次に、プログラムを終了させたい場合は、フラグをtruに設定して待機する必要があります(これは正常な終了のためです)

于 2013-03-25T09:47:56.417 に答える
2

条件を使用するのではなく値を渡したため、ステートメントwhileは常にtrueと評価されます。true

于 2013-03-25T09:47:18.847 に答える
1

あなたはいつもこのようにそれをすることができます:

boolean loopCheck = true;
while(loopCheck)
{
//do stuff
loopCheck = false;
}

PHPでは、Javaで機能するかどうかわからない場合は、次のことができます。

while(true)
{
//do stuff
break;
}
于 2013-03-25T09:49:09.017 に答える
0
Use a boolean flag.

boolean flag=true;
while(flag)
{
// Your code here

if(condition)   //condition to exit loop
{
flag=false;
}
}
于 2013-03-25T10:02:49.063 に答える