2012-01-20 23 views
0

有沒有辦法在套接字連接保持打開時從TCP套接字讀取時檢測EOF?Java服務器 - TCP套接字檢測EOF,但沒有關閉套接字連接

大部分我所看到的例子是沿着線的東西:

int n=0; 
While((n = read.inStream(data)) != -1){ 
    destType.write(data, 0, n); 
} 

然而,這意味着你被迫要接受一個新的數據塊,每次創建一個新的連接。 在我的情況下,這是一個恆定的圖像流,通過套接字作爲字節發送,我想處理每個圖像,而不必關閉連接,以便我可以將所有圖像與單個用戶相關聯,以及不以高頻率持續打開和關閉連接只是更有效率。

那麼有沒有辦法做到這一點或一些可能的選擇信息?

回答

1

否 - 如果連接保持打開狀態,則流未達到其結尾。流的報告EOF ,然後有更多的數據的想法違背了流的原則。

如果你想在一個TCP流發送多封郵件,最簡單的方法就是前綴的每一個消息,它的長度:

HEADER BODY 
HEADER BODY 
HEADER BODY 

然後客戶端將讀取頭,發現該消息是多久,讀取它,然後讀取下一個標題等。

+0

或使用開始消息/結束消息指示符。 –

+0

@ShaneWealti:雖然這是可能的,但它變得更加密集客戶端 - 在讀取數據時必須解析數據,並制定一個轉義策略,以確定數據是否自然包含「結束消息」指示符。 –

+0

我更喜歡這兩種方式 - 一種以SOH開頭的包含ASCII碼的數據長度,可以進行結構和健全性檢查的包含校驗和的終止符。如果報頭檢查失敗或終止器不良,則會丟棄所有數據,直到收到另一個可啓動另一個報頭檢查的SOH爲止。 –