2014-04-02 88 views
1

在我的Android應用程序關閉連接(如WiFi的轉向)時,我得到無限數量的此日誌消息[cds] shutdowninput in read這會中斷我的應用程序,並使其執行大量不必要的輸入檢查,我用java socket編程,我試圖以檢查問題致電isInputShutdown(),但一無所獲,我不知道怎麼我試圖:如何檢測(關閉輸入讀取)

public String getServerResponse() throws Exception{ 

     while(true){ 
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), Charset.forName("UTF-8"))); 
        if(xbmc_socket.isInputShutdown()){ 
        return "stopped"; 
        }else{ 
        //continue(and that's what it always doing) 
        } 
     } 
} 
+0

「繼續」部分發生了什麼?你爲什麼要在循環中創建BufferedReader? – EJP

+0

不只是非常簡單的處理,它不會影響整個過程 –

+0

您是否將讀取的行存儲到數據結構中? – EJP

回答

1

我的問題是,因爲我聲明瞭BufferedReader本地變量(如問題中的代碼中所示),並導致在連接結束時打開一個套接字,或者此連接從我的側面結束或從另一邊。

因此,爲了克服這個問題,我宣佈BufferedReader全球變量,它使我能夠處理它時連不上,像手動關閉套接字或做任何適合我的應用程序最好的:

public BufferedReader in; 
public String getServerResponse() throws Exception{ 
    while(true){ 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream(), Charset.forName("UTF-8"))); 
     // the rest of the code 
    } 
} 
+1

謝謝! 已經解決了它與http://stackoverflow.com/questions/10240694/java-socket-api-how-to-tell-if-a-connection-has-been-closed ...無需捕獲,但仍然會試一試 –

+0

@RonanDejhero太棒了,我想你也可以把兩個答案合併在一起。 –