TServerSocket與TClientSocket又一問! |
缺席
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
各位先進,我使用TServerSocket與TClientSocket寫了一個通訊程式,其中伺服端可以接受很多客戶端的連線,我的問題是,當其中的客戶端斷線後(即非正常離線Disconnect)在伺服端要如何偵測到客戶端已經離線了?
我使用了OnClientError來補抓錯誤訊息,但是卻抓不到,例如我把客戶端的網路線故意鬆脫再接上,並同時送訊息給那個客戶端,鬆脫與送訊息時並收不到Client Error,但在網路線再次接上後才收到錯誤訊息,我要如何在鬆脫的瞬間或送訊息給那個客戶端的時候,收到錯誤訊息呢?
|
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
謝謝kagaya的提示,我稍早已用你提示的方法解決了這個問題,但是其中還是有些技術問題,我也一一的解決了,心得在此提出來供大家參考。
一.如果你的聊天室具有記錄使用者上線的清單紀錄,請記得在發訊息給大家時,索引值要記得從高往下計數,或者用一個私有變數作一個註標,不要讓檢查的函數短時間內重複進入,如果你的TServerSocket是採用None Blocking,也就是不等待,此時若是有用戶進入退出,引發記錄用戶進入或退出的函數,造成用戶索引值的變動,如果索引值計數的方向如果不正確,會造成out of bound的錯誤!唉~同步的東西不見得好寫!!!
二.利用另外兩個私有變數紀錄ServerSocket發訊息的狀況與用戶是否正在進入或退出的狀態,如果ServerSocket在發訊息就不要檢查用戶狀況,原因是如此將會造成用戶端可能在同一時間內收到多個訊息(用戶間通訊的訊息與檢查用的訊息),這樣會破壞Client端分析Server端的資訊能力,並且降低了訊息傳遞的效率,當然這個問題可以避免,如果你想要花更多的時間,在解析Server送來的訊息上的話!!!而記錄用戶進入退出的用意同上面第一點,不再贅述。
很想把程式碼貼上來給大家看,但是程式碼實在太大,有點凌亂,因此僅提供心得供大家分享。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |