2013-10-13 42 views
0

我得到了最隨機的問題。簡單地說,我期望在while循環中進行迭代,直到滿足某個條件,並且當它未被滿足時,應該運行循環後的代碼。出於某種原因,while循環後的代碼不能運行......這裏是我的代碼:代碼不在Java中的while循環後運行

while (true) 
     { 
      Socket ClientSocketConnection = serverSocket.accept(); 
      System.err.println("We have established a connection with a client!"); 
      System.out.println(" "); 

      ServerInput = new BufferedReader(new InputStreamReader(ClientSocketConnection.getInputStream())); 
      ServerOutput = new DataOutputStream(ClientSocketConnection.getOutputStream()); 

      while((StringInput = ServerInput.read()) != -1) 
      { 
       //Things get done here 

      } 

      //methodBeingUsed is a string here 

      switch (methodBeingUsed){ 
       case "GET": 
        GET(); 
        break; 
       case "POST": 
        POST(sBuffer.toString()); 
        break; 
      } 

      System.err.println("The Connection will now Terminated!"); 
      ServerOutput.close(); 
      ServerInput.close(); 
      ClientSocketConnection.close(); 
     } 
    } 

基本上switch語句不被運行出於某種原因?當我調試代碼時,我得到了ServerInput變量的最後-1,代碼就停止了。停止並且不會繼續執行while(true)循環中的所有其他操作。真的不知道爲什麼會發生這種情況...

+1

什麼是MethodBeingUsed?它有什麼可能的價值? – SudoRahul

+0

哦,對不起,它只是一個字符串變量 – user481610

+0

@ user12345:你可以得到任何解決方案嗎? –

回答

3

這顯然是阻止方法:ServerInput.read(),這意味着它會等到它實際讀取內容。如果它沒有讀取任何內容,它只是在等待。您可能沒有正確連接到現有的連接。

+0

Touche你是正確的我認爲在我的數據正在讀取的行的末尾,然後-1將被用來顯示沒有更多的數據剩下並結束循環。謝謝! – user481610

+0

一旦從ServerInput變量讀取了最後一個數據位,我可以修改代碼以跳出循環? – user481610

+0

我還沒有使用Socket類多年...嘗試谷歌「Java非阻塞套接字讀取」,你可以做到這一點。或者像「hasInput」布爾方法應該存在。 – libik