2012-12-28 77 views
0

首先,如果您通過閱讀未定義長度的HTTP響應幫助我解決了問題,我想感謝您。我接受了您的建議,並從HTTP響應切換到原始Java套接字。但我也有這個小問題。在java中等待客戶端響應的正確方法是什麼?

推送服務器的本質是當客戶端被接收時將東西推送到客戶端(在我的情況下,系統使用標有設備ID的文件)。問題是,使用Java教程中的KnockKnock示例,他們的代碼:

while ((inputLine = in.readLine()) != null) {... 

等待客戶端在發送內容之前發送內容。所以我決定用:

while (true) { 
    if ((inputLine=in.readLine())==null) inputLine=""; 
    ... 

任何輸入interpereters的得到這個空字符串,那麼他們將不會做任何事情。

我的問題本質上是哪一個更好,如果它是第一個,我該如何繼續檢查文件以發出沒有產生線程的需要的文件?

+0

已回答問題[here](http://stackoverflow.com/q/14077960/207421)。 – EJP

回答

2

第一個實現了爲KnockKnock示例設想的協議:客戶端發送「KnockKnock」,服務器應答。

第二個沒有多大意義。如果客戶端有一個與服務器打開的輸出流,並且服務器調用readLine(),則表示它正在等待來自客戶端的一條線路。呼叫將阻塞,直到客戶端發送一條線路或關閉套接字。

看來你並不期待客戶的任何意見。在這種情況下,根本不要打開輸入流,也不要在輸入流上調用readLine()(顯然)。一旦你想發送它,就直接發送你需要發送給客戶端的東西。

+0

我確實希望有雙向通信(至少在開始握手時),但在此之後,它只會偵聽關閉連接的命令:「servicedeath \ n」 –

相關問題