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

請教TClientSocket連線錯誤的問題

答題得分者是:RaynorPao
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-02 21:16:40 IP:61.56.xxx.xxx 未訂閱
請教各位前輩: 我用TClientSocket連線,在onError事件裡寫好錯誤處理程序,並將ErrorCode設為0。 然後程式連線到一個不存在的主機,可以很順利攔下錯誤做處理。 可是,再次連線到不存在的Host時,就出狀況了,跳過了原本的onError事件。不知道是怎麼回事? (奇怪的是,第三次連線又恢復正常、第四次又跳過...)
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-03 00:01:14 IP:61.221.xxx.xxx 未訂閱
引言: 請教各位前輩: 我用TClientSocket連線,在onError事件裡寫好錯誤處理程序,並將ErrorCode設為0。 然後程式連線到一個不存在的主機,可以很順利攔下錯誤做處理。 可是,再次連線到不存在的Host時,就出狀況了,跳過了原本的onError事件。不知道是怎麼回事? (奇怪的是,第三次連線又恢復正常、第四次又跳過...)
00156 你好: 方便把你的 code 貼上來嗎??(有問題的相關部分) --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-03 00:30:43 IP:61.56.xxx.xxx 未訂閱
感謝回應! 原本在寫一組遠端控制的程式,因為控制的電腦可能要控制多台電腦,因此必須多次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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-03 00:52:56 IP:61.221.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-03 07:16:27 IP:61.56.xxx.xxx 未訂閱
RaynorPao您好: 我改了之後還是一樣耶...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-03 08:15:23 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao您好: 我改了之後還是一樣耶...
00156 你好: 「等」久一點 最好是按下
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-03 10:54:52 IP:210.70.xxx.xxx 未訂閱
嗯...我之前有試過,好像也是不行(不知道是不是等得仍不夠久?)。 而且,我的程式必須逐一傳送訊息給使用者所選取的所有電腦。 真是傷腦筋說...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-03 11:10:45 IP:203.73.xxx.xxx 未訂閱
引言: 嗯...我之前有試過,好像也是不行(不知道是不是等得仍不夠久?)。 而且,我的程式必須逐一傳送訊息給使用者所選取的所有電腦。 真是傷腦筋說...
00156 你好: 我在我自己的電腦測試可以耶 建議你另外 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-03 17:31:29 IP:61.56.xxx.xxx 未訂閱
嗯~謝謝RaynorPao囉~ 我的測試程式就是上面簡單的code...剛才終於可以攔下第二次的連線錯誤事件了。 根據試驗,第一次的錯誤是由ClientSocket觸發,可以在onError攔下;第二次則是由Application觸發,必須改寫Application.onException或者利用try...except來迴避錯誤。 下面的網址可以參考 http://community.borland.com/article/0,1410,19524,00.html 但是,仍然很納悶...還要追蹤一下訊息怎麼跑的... 如果有誰有更好的方法,要告訴我唷~
系統時間:2024-06-30 16:28:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!