全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1397
推到 Plurk!
推到 Facebook!

TServerSocket與TClientSocket又一問!

缺席
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-23 21:31:40 IP:211.22.xxx.xxx 未訂閱
各位先進,我使用TServerSocket與TClientSocket寫了一個通訊程式,其中伺服端可以接受很多客戶端的連線,我的問題是,當其中的客戶端斷線後(即非正常離線Disconnect)在伺服端要如何偵測到客戶端已經離線了? 我使用了OnClientError來補抓錯誤訊息,但是卻抓不到,例如我把客戶端的網路線故意鬆脫再接上,並同時送訊息給那個客戶端,鬆脫與送訊息時並收不到Client Error,但在網路線再次接上後才收到錯誤訊息,我要如何在鬆脫的瞬間或送訊息給那個客戶端的時候,收到錯誤訊息呢?
kagaya
中階會員


發表:74
回覆:175
積分:59
註冊:2002-12-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-03 18:03:06 IP:210.200.xxx.xxx 未訂閱
我是參考別人的做法.server端固一定段時間就去檢查所有Client的狀況 這樣就可以知道誰斷線了
------
KUSO 無處不在
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-03 20:52:56 IP:211.22.xxx.xxx 未訂閱
謝謝kagaya的提示,我稍早已用你提示的方法解決了這個問題,但是其中還是有些技術問題,我也一一的解決了,心得在此提出來供大家參考。 一.如果你的聊天室具有記錄使用者上線的清單紀錄,請記得在發訊息給大家時,索引值要記得從高往下計數,或者用一個私有變數作一個註標,不要讓檢查的函數短時間內重複進入,如果你的TServerSocket是採用None Blocking,也就是不等待,此時若是有用戶進入退出,引發記錄用戶進入或退出的函數,造成用戶索引值的變動,如果索引值計數的方向如果不正確,會造成out of bound的錯誤!唉~同步的東西不見得好寫!!! 二.利用另外兩個私有變數紀錄ServerSocket發訊息的狀況與用戶是否正在進入或退出的狀態,如果ServerSocket在發訊息就不要檢查用戶狀況,原因是如此將會造成用戶端可能在同一時間內收到多個訊息(用戶間通訊的訊息與檢查用的訊息),這樣會破壞Client端分析Server端的資訊能力,並且降低了訊息傳遞的效率,當然這個問題可以避免,如果你想要花更多的時間,在解析Server送來的訊息上的話!!!而記錄用戶進入退出的用意同上面第一點,不再贅述。 很想把程式碼貼上來給大家看,但是程式碼實在太大,有點凌亂,因此僅提供心得供大家分享。
系統時間:2024-08-16 4:34:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!