請教TClientSocket連線錯誤的問題 |
答題得分者是:RaynorPao
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請教各位前輩: 我用TClientSocket連線,在onError事件裡寫好錯誤處理程序,並將ErrorCode設為0。 然後程式連線到一個不存在的主機,可以很順利攔下錯誤做處理。 可是,再次連線到不存在的Host時,就出狀況了,跳過了原本的onError事件。不知道是怎麼回事? (奇怪的是,第三次連線又恢復正常、第四次又跳過...)00156 你好: 方便把你的 code 貼上來嗎??(有問題的相關部分) --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
感謝回應!
原本在寫一組遠端控制的程式,因為控制的電腦可能要控制多台電腦,因此必須多次Open及Close。
下面是一個簡單的測試程式,問題就像前面說的...
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ScktComp, StdCtrls; type TForm1 = class(TForm) Button1: TButton; CilentSocket: TClientSocket; procedure Button1Click(Sender: TObject); procedure CilentSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin CilentSocket.Host:='ABCDEFG'; //不存在的電腦 CilentSocket.Port:=1025; CilentSocket.Open; end; procedure TForm1.CilentSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ShowMessage('連線錯誤'); ErrorCode:=0; end; end.(若ClientSocket.Host指定為正常連線中的電腦,就不會發生問題) |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
00156 你好:
試試看改成下面那樣 <>< face="Verdana, Arial, Helvetica">引言:
下面是一個簡單的測試程式,問題就像前面說的...
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ScktComp, StdCtrls; type TForm1 = class(TForm) Button1: TButton; CilentSocket: TClientSocket; procedure Button1Click(Sender: TObject); procedure CilentSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket.Host:='ABCDEFG'; //不存在的電腦 ClientSocket.Port:=1025; // ClientSocket.Open; ClientSocket.Active:=true; end; procedure TForm1.CilentSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ShowMessage('連線錯誤'); ErrorCode:=0; ClientSocket.Active:=false; end; end.(若ClientSocket.Host指定為正常連線中的電腦,就不會發生問題) -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
嗯~謝謝RaynorPao囉~
我的測試程式就是上面簡單的code...剛才終於可以攔下第二次的連線錯誤事件了。
根據試驗,第一次的錯誤是由ClientSocket觸發,可以在onError攔下;第二次則是由Application觸發,必須改寫Application.onException或者利用try...except來迴避錯誤。 下面的網址可以參考
http://community.borland.com/article/0,1410,19524,00.html 但是,仍然很納悶...還要追蹤一下訊息怎麼跑的...
如果有誰有更好的方法,要告訴我唷~
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |