[問題] Socket做HttpServer 偵測 Client 斷線 ?
大家好~ 不好意思,不太能夠在標題講清楚要做啥:
小弟現在要用 ServerSocket 和 Scoket 做一個簡單的 MJPEG over HTTP server
基本的 header 和 response 格式之類的都已經 OK 了,現在遇到一個問題
和一般的 HTTP Server 不同, 處理 Client 的 Thread 並非輸出完要輸出的
東西後就會自行將 socket close , 而是 會循環將某個資料夾底下的圖片給
輸出給 Client (有點像是 IP Camera , 會一直把畫面傳過去),因此在處理
Client 的 Thread 是這樣寫的:
// Client 是 Browser 或 IPCamera Viewer
public void run(){
try{
/* 收取 request 和輸出 response header 的部分 */
while(ipt.read()!=-1){
/* 沒做甚麼事,就是利用 .read 讓他 block */
}
}catch(Exception e){}
}
public void echoJPEG(byte[] data){
/* 輸出一些 bondary 之類的資料 */
opt.write(data);
/* 輸出一些結束的資料 */
}
當圖片更換的時候,會有一個 Thread 統籌呼叫各個 Client 的 echoJPEG()
把圖片輸出給 Client ,因此其實處理 Client 的 Thread 在輸出完
response header 之後就是在那邊等待了
原本以為當 Client 關閉 (如 Browser 關閉),理論上應該 ipt.read 會 "到底"
傳回 -1 或者遇到 IOException 離開迴圈而結束掉這個 Thread
但是不管怎麼測試, IPCam Viewer 或者 Browser 關閉的時候,這個 Thread 都
還是繼續執行,而且呼叫 echoJPEG 也沒有發生任何 exception....
想請問在這種狀況應該要如何偵測 Client 已經關閉了呢? 還是根本無解?
感謝大家~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.200.149
※ 編輯: darkk6 來自: 218.164.200.149 (01/17 17:02)
→
01/17 17:14, , 1F
01/17 17:14, 1F
→
01/17 17:16, , 2F
01/17 17:16, 2F
→
01/19 09:12, , 3F
01/19 09:12, 3F
→
01/20 17:13, , 4F
01/20 17:13, 4F
java 近期熱門文章
PTT數位生活區 即時熱門文章