2013-03-25 126 views
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(); 
} 
+0

'我shouldnot讓代碼做無限loop.'我不認爲這是正確的ESP,如果你想有一個程序,它沒有完成。 – 2013-03-25 10:10:46

回答

5

當JVM在服務器上關閉時,通常會退出循環。或者當拋出異常並且沒有被捕獲時。這是無限循環合理的一種情況。如果一切順利,你的服務器將永遠存在。

4

使用boolean標誌,你可以在某些時候從內部或外循環設置爲false

boolean started = true; 
while (started) { 
    ... 
} 
2

while語句總是會評估爲true,爲你傳遞的價值true而不是使用任何條件

3
通常

爲你使用一些標誌信號終端,像這樣這些應用程序:

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

,然後當你想要的程序終止,你只需要設置標記,以TRU並等待(這是正常終止)

4

如果服務器應該運行並無限期地接受連接,則不需要退出循環。

如果有一些命令或條件,當服務器應該終止,只是這樣做

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

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

    if (condition) 
     break; 
} 

甚至更​​好

while (!condition) { 
... 
} 
1

你總是可以做到這一點是這樣的:

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

在PHP中,不確定它是否在java中有效,我們可以做

while(true) 
{ 
//do stuff 
break; 
} 
0
Use a boolean flag. 

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

if(condition) //condition to exit loop 
{ 
flag=false; 
} 
}