線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3181
推到 Plurk!
推到 Facebook!

socket server 問題請教

 
cmlee
一般會員


發表:1
回覆:0
積分:0
註冊:2002-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-05-20 09:26:57 IP:61.218.xxx.xxx 未訂閱
各位先賢 請問在N-Tire上使用時會用到Borland socket server來溝通 但是如何防止socket server突然斷線,或者遇到異常時您們是如何處理 ?可否提出您們使用心得. Best regard.
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-05-28 21:27:12 IP:61.219.xxx.xxx 未訂閱
引言: 各位先賢 請問在N-Tire上使用時會用到Borland socket server來溝通 但是如何防止socket server突然斷線,或者遇到異常時您們是如何處理 ?可否提出您們使用心得. Best regard.
站長代貼被駭前文章: hxf_wolf 回覆文章於 Delphi K.Top討論區 主題: socket server 問題請教 修改ScktSrvr.dpr->ScktMain.pas client的意外斷開,Server不能偵聽到中斷,以致一直block 一個clientThread,我試過可以通過PostThreadMessage(Thread.ThreadId, WM_USER, 0, 0),發一個消息給線程,在ClientThread因為它是創建了一個消息隊列,並且它的MsgWaitForMutipleObjects是可以偵聽到消息,所以你可以稍微修改一下server的源碼,加一些小處理就可以了。 server加一下TTimer,時間為60000ms,一分鐘吧先,每分鐘,server去postThreadMessage給每個ClientThread,然后在 RefreshClientTimer是一個TTimer, interval=60000(一分鐘) procedure TSocketForm.RefreshClientTimeTimer(Sender: TObject); var I: Integer; Thread: TSocketDispatcherThread; begin RefreshClientTime.Enabled := False; try for I := 0 to ConnectionList.Items.Count - 1 do begin Thread := TSocketDispatcherThread(ConnectionList.Items.Item[I].Data); PostThreadMessage(Thread.ThreadID, WM_USER, 0, 0); end; finally RefreshClientTime.Enabled := True; end; end; ClientExceute中: //在這個case中 WAIT_OBJECT_0 1: begin while PeekMessage(msg, 0, 0, 0) do ... if 得到當前時間 - 客戶端程序最后響應時間 > 某個時間(自己設) then ClientSocket.Connected := False//就斷開它。 end; 以上引用于www.delphibbs.com 但有一些不太明白 ''客戶端程序最后響應時間''如何取得,存放在那里! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-03 10:58:17 IP:210.61.xxx.xxx 未訂閱
另外一種方式是自行建置"訊息網路",依照網路頻寬來決定以TCP Or UDP 協定進行;好處是比較容易掌握整個狀況,以及進行資料加密的動作.
系統時間:2024-04-26 5:12:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!